Windowsの robocopyが便利なのとバッチファイル作成時の注意点

作業用コンピュータにはWindowsを使っていて、普段のバックアップにはいままでRealSyncというソフトを使っていたんだんけど、rsyncみたいなもんないんかね。と、思っていたらrobocopyってのがあるみたい。

で、これは便利ということでrobocopyをバッチファイルに落としこんで、変数でコマンドを渡してあげると便利だよねとおもって、バッチファイルの書き方を調べてかんたんなファイルを書いたらうまくいかなかった。

例えば、こんな感じ。

rem コピー元を変数に設定するよ
set VAR1="C:\sorce"
rem コピー先を変数に設定するよ
set VAR2="C:\distr"

robocopy VAR1 VAR2 /MIR /LOG:"C:\logs\log.txt"

なにげなくこんなのを書いてみたんだけどうまくいかなかった。 どうやらうまく変数が展開されていない様子で、ログにはコピー元が指定されていないとかでてた。

なんでだろうなともおもいつつ、どうやってデバッグしていいのかわからないので、変数が想定した形に展開された状態で直接コマンドプロンプトに入力してみるとうまくいく。

で、バッチファイルが起動した瞬間のコマンドプロンプトのウィンドウをみてみようと以下のように書き換えてみた。

rem コピー元を変数に設定するよ
set VAR1="C:\sorce"
rem コピー先を変数に設定するよ
set VAR2="C:\distr"

robocopy VAR1 VAR2 /MIR /LOG:"C:\logs\log.txt"
TIMEOUT /T 60

これで、60秒間終了せずにウィンドウを開いててくれるはず。

確認すると、そんな

'元を変数に' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

みたいなメッセージが盛大にでていた。

どうやら、改行コードがLFのまま作業をしていたせいで、うまくバッチファイル内の行を認識できずに変数がセットできていなかったっぽい。

改行コードをCR+LFに設定しなおすと、ちゃんとコメントを書いた状態で変数が正しくセットできて、うまく動いてくれた。

Windows コマンドプロンプト ポケットリファレンス
山近 慶一
技術評論社
売り上げランキング: 9,384

Rlated & Feedbacks

http://www.trapon.jp/cms/mt-tb.cgi/319