私は、Robocopy が構文に関して恣意的であるという点で扱いにくいことを発見しました。私はあなたに似た問題を見つけました:
このコードは動作します:
Set Today=%DATE:~0,3%
Robocopy "G:\folder A" "U:\%Today%\folder A" ^
/S /XJD /R:25 /W:4 /NP /copyall ^
/LOG:"U:\%Today%\FolderALog.txt"
IF ERRORLEVEL 8 goto Badend
この (よく構造化された) コードは機能しません
Set Today=%DATE:~0,3%
Set source="G:\folder A"
Set target="U:\%Today%\folder A"
Set Logname="U:\%Today%\FolderALog.txt"
Echo Source is %Source%
Echo Target is %Target%
Echo logfile named %Logname%
Pause
Robocopy %source% %target% ^
/S /XJD /R:25 /W:4 /NP /copyall ^
/LOG:%Logname%
Pause
ただし、この 2 番目の例では、コマンド ラインから 1 番目の継続を取得すると、機能します。
Set Today=%DATE:~0,3%
Set source="G:\folder A"
Set target="U:\%Today%\folder A"
Set Logname="U:\%Today%\FolderALog.txt"
Echo Source is %Source%
Echo Target is %Target%
Echo logfile named %Logname%
Pause
Robocopy %source% %target% /S /XJD /R:25 /W:4 /NP /copyall ^
/LOG:%Logname%
Pause
私は DOS の時代からバッチ コマンド ジョブの継続文字としてキャレット (^) を使用してきましたが、この場合、パーサーはそれを前の変数と連結しようとし、ジョブは終了します。フォルダーに「U:\%Today%\folder A ^」という名前を付けます。何かがうまくいくまで、何かを試し続けます。トラブルシューティングのテクニック: 新しく定義された変数の Echo を実行してから一時停止すると、タイプミスや引用符の位置の誤りをチェックできます。最後の一時停止により、エラー コードを読み取る十分な時間が得られます。私がかつて遭遇した別のことは、引用符で囲まれたパスのスペースの代わりに印刷できない文字を誤って挿入することでした. RoboCopy は非常に強力で、扱いにくい構文をときどきいじる価値があります。