MS DOS - 使用参数和SET复制任意数量的文件

时间:2012-12-11 20:38:47

标签: windows batch-file parameter-passing dos

我在MS Dos上有一个问题有点傻,基本上我做的是以下内容:

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

    • 目标目录存在,如果不存在,则创建它。
    • 确定传递的参数。
    • 表明是否在那里复制文件。
  1. 我已经尝试但不知道放置参数的部分。也尝试将变量的值等于参数,但我认为它不能。

    我离开了我的所作所为,但我已经使用了参数。

    @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
    

1 个答案:

答案 0 :(得分: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种或更多类型的错误,你会感谢你自己。