Help us understand the problem. What is going on with this article?

robocopyはlogの出力先のディレクトリを作成してくれない

More than 1 year has passed since last update.

結論

  • robocopyのログ出力先のディレクトリはあらかじめ用意しろ。

経緯

ホストごとの設定ファイルを階層を保持した形でぶち抜きたいという欲求に駆られて、
ホストが1000台弱、これのログ、1ファイルに縦に並べてもまぁいいけど、
ホストごとにファイル分けてサブフォルダに格納したいよね~、

cmd
C:\Users\maru8m\hoge>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は F832-5101 です

 C:\Users\maru8m\hoge のディレクトリ

2018/02/16  22:39    <DIR>          .
2018/02/16  22:39    <DIR>          ..
2018/02/16  22:41                37 a.bat
2018/02/16  22:21    <DIR>          fuga
2018/02/16  22:21    <DIR>          hoge
               1 個のファイル                  37 バイト
               4 個のディレクトリ  245,655,572,480 バイトの空き領域
cmd
C:\Users\maru8m\hoge>robocopy fuga piyo /log:log\log.txt

2018/02/16 22:35:25 エラー 3 (0x00000003) ログ ファイルを開いています C:\Users\maru8m\hoge\log\log.txt
指定されたパスが見つかりません。

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
(略)

Sigh...

触ってれば気づくことなんですが、robocopy はログの出力先ディレクトリを掘ってくれません。
上の場合ではC:\Users\maru8m\hoge\は存在しますがC:\Users\maru8m\hoge\log\が存在しないために
robocopy は指定されたパスが見つからないとか言います。

対処

α. ログ出力先のパスが存在する環境を前提にする

運用でカバー is 最強。

β. robocopy の手前でパスを切る処理を書く

下記のようになる。

a.bat
@pushd %~dp0
@echo off

call :_init_log_dir
robocopy fuga\ piyo\ /log:log\log.txt
exit /b

:_init_log_dir
if exist %~dp0\log (
    if not exist %~dp0\log\ (
        rem worrywart
        del %~dp0\log
        mkdir %~dp0\log
    )
) else (
    mkdir %~dp0\log
)
exit /b

logというファイルが a.bat と同じ階層にあると削除されてしまうが、
Windows 環境の作業フォルダに拡張子なしのファイルなんてものがあるとは思えないね!
どうしても心配ならrem worrywartの箇所をexit /bとかexit /b 1に置き換えるといいのではないでしょうか。

参考

Windowsバッチまとめ#ファイル存在有無

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした