10

スクリプト作成はまったく初めてで、Web を検索して解決策を見つけようとしましたが、困っているので、助けを求めてください!

ソースと宛先の両方として変数を使用して robocopy を使用しようとしていますが、それぞれに異なるものがありますが、正しい構文を取得できません。

私が正常に動作するようになるハードコードは次のとおりです。

robocopy C:\Users\me\Documents\a C:\Users\me\Documents\b

しかし、変数で動作させることはできません。私は、読んだ後、" と % in/out を使用して、Set の有無にかかわらず、以下のすべてのバリエーションのように見えるものを試しましたが、どれも機能しませんでした。

Set src="C:\Users\me\Documents\a"
Set dest="C:\Users\me\Documents\b"

robocopy %src% %dest%

明確化を求めていない場合でも、それが私がやろうとしていることの明確な説明であることを願っています. 助けてくれてありがとう。

4

6 に答える 6

4

私は、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 は非常に強力で、扱いにくい構文をときどきいじる価値があります。

于 2014-01-03T22:20:48.723 に答える
4
set "src=C:\Users\me\Documents\a"
set "dest=C:\Users\me\Documents\b"

robocopy "%src%" "%dest%" 

あなたのシンタックスには何も悪いことはありません。この方法は「より堅牢」またはより標準的またはより習慣的です...

しかし、robocopy は xcopy ではなく copy ではありません。ソースからターゲットに変更または新しいファイルをコピーするよう robocopy に要求しています。変更がない場合、robocopy は何もコピーしません。試してみてうまくいった場合....変更がない場合は、ファイルのコピーはありません。

そして、robocopy にサブディレクトリのコピーを要求していません。そのため、ソース ディレクトリにファイルがない場合、何もコピーされません。

于 2013-11-13T16:34:35.947 に答える
0

この方法を試してください

Set src=C:\Users\me\Documents\a
Set dest=C:\Users\me\Documents\b

robocopy %src% %dest% /E

/E - 空のサブフォルダーを含むサブフォルダーのコピー用

于 2017-04-17T10:26:46.787 に答える