0

我在 MS Dos 上遇到了一个有点傻的问题,基本上我所做的如下:

假设我们位于 C:\BATCH... 将目录 C:\BATCH 中作为参数传递的任意数量的文件复制到目录 J:\TEXTS。探测:

    • 该目标目录存在,如果不存在,则创建它。
    • 确定传递了哪些参数。
    • 指示是否将文件复制到那里。

我试过了,但不知道把参数放在哪个部分。也尝试将变量的值与参数相等,但我认为它做不到。

我离开了我所做的,但我使用了参数。

@echo off
if not exist J:\texts\nul md J:\texts
set dir=J:\texts
cls

:continue
set /p file="File to copy (END to finish) "
if %file%==END goto end
if not exist %file% goto error1
cls
echo You will copy the file %file% into directory %dir%
pause
cls
copy %file% %dir% >nul
goto loopback

:loopback
goto continue

:error1
cls
echo The file %file% doesnt exist.

:end
4

1 回答 1

0

参数以 , 等形式传递%1%2所以如果你调用

YourScript.bat "foo.txt" "bar.txt"

,那么变量%1将包含"foo.txt"并且%2将包含"bar.txt"

要支持可变数量的参数,您可以使用命令shift。它将所有参数向后移动一步,因此 %2 变为 %1,%3 变为 %2,依此类推。

因此,在循环中,您可以将文件移入%1,然后调用shift,并重复该操作,直到%1为空。

@echo off

rem  Initialization goes here

:start

rem  Check if there are files left.
if %1X==X goto done

echo Copying %1
rem  Actual copying goes here. Maybe some checking
rem  if file exists and stuff like that.
shift
goto start

:done
echo Done.

PS:我在您的脚本中看到标签“error1”。不要害怕使用更具描述性的名称。如果您遇到 10 种或更多类型的错误,您会感谢自己。

于 2012-12-11T21:33:59.143 回答