web-dev-qa-db-ja.com

ソースおよび宛先を変数としてロボコピーを使用する

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

ソースとデスティネーションの両方として変数を使用して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%

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

9
lcllm7
set "src=C:\Users\me\Documents\a"
set "dest=C:\Users\me\Documents\b"

robocopy "%src%" "%dest%" 

あなたの罪に何も悪いことはありません。この方法は、「より堅牢」またはより標準的またはより習慣的です。

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

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

4
MC ND

私は、Robocopyが構文についてarbitrary意的であるという点で扱いにくいと感じました。私はあなたと同様の問題を発見しました:
このコードは機能します。

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 ^」という名前を付けます。うまくいくまで、あなたは何かを試してみます。トラブルシューティングのテクニック:新しく定義された変数のエコーを実行してから一時停止すると、タイプミスや引用符の位置間違いをチェックできます。最後に一時停止すると、エラーコードがある場合にそれを読み取るための十分な時間が与えられます。私が一度遭遇した別のことは、引用符で囲まれたパスのスペースの代わりに印刷できない文字を誤って挿入することでした。 RoboCopyは非常に強力であり、時折微妙な構文をいじる価値があります。

古い質問のように見えますが、私は今日この問題にぶつかり、setコマンドに二重スラッシュを使用して解決しました。

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

robocopy %src% %dest%
2
Don Honabach

.batを使用しようとしている場合、コードは次のようになります。

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

robocopy.exe %src% %dest%

.exe

0
Alan Carlos

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

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

robocopy %src% %dest% /E

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

0
MOBASHIR IMAM