0

我正在编写一个批处理脚本,它将一堆小文件从一个位置复制到另一个位置,验证该文件是否存在于新目录中,删除原始文件,然后继续。我已经实现了一个 FOR 循环来做到这一点,但我似乎无法让它工作。有任何想法吗?

::Copying files-
::For loop copies file, verifies file was copied,
::and removes file from source.
for %%f in (Q:%source%\*) do (
:recopy
copy %%f %dest%\%%f
if not exist %dest%\%%f goto recopy
set /a count+=1
del %source%\%%f
echo copied !count! of %total%
ping -n 1 -w 500 1.1.1.1 >nul
)

变量的输入如下:

set /P source=Enter path to files on P:(Temp) drive (EX: jdoe\copy)

set dest=D:Temp\Copy

如果网络共享的脚本添加如下:

net use Q: \\SERVER\Temp

给出的错误是:

该系统找不到指定的文件

并重复错误,直到屏幕填满。

完整的 pastebin 在http://pastebin.com/yjXP7H6U

4

1 回答 1

0

如果有记忆,您不能在 for 循环或 if 语句中使用标签。您应该移出:recopy循环。像这样的东西:

::Copying files-
::For loop copies file, verifies file was copied,
::and removes file from source.
for %%I in (Q:\%source%\*) do (
    call :recopy "%%~fI" "%dest%\%%~nxI"
    set /a count+=1
    del "%%~fI"
    echo copied !count! of %total%
    ping -n 1 -w 500 1.1.1.1 >nul
)
goto :EOF

:recopy source dest
copy "%~1" "%~2"
if not exist "%~2" call :recopy "%~1" "%~2"
goto :EOF
于 2013-02-28T18:40:58.417 回答