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

与えられたエラーは次のとおりです。

システムは、指定されたファイルを見つけることができません

画面がいっぱいになるまでエラーが繰り返されます。

フルペーストビン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 に答える