

batファイルで robocopy を使用し、 **ある文字を含んだファイル名を、抽出して他フォルダへコピーしようと考えております。**  
空白を含んだファイル名もコピーしたいので、下記のようなコードを書きました。

  * コピー元データの保存先：fs_src
  * 抽出したデータの保存先：fs_bk
  * 抽出したいファイル名： name

`robocopy /s "%fs_src%" "%fs_bk%" "*%name%*.*"`

コピー結果が失敗したか成功したかを知りたいので **LOGをtxtファイルで出力しようとしています** が  
下記のように書いてもなにも出ませんでした。  
robocopy 文の後にLOG文 を書いておりました。

  * LOG出力先指定：logdir
  * LOGファイル名：target
  * ログ用の日付、時刻、ファイル名設定：ToDay
  * 抽出したデータの保存先：fs_bk

`/LOG:log\%logdir%\%target%_%ToDay%.txt %%~pI %fs_bk% %%~nxI`

うまくいけばこのようなLOGテキストファイルができるはずです。

例：2020/03/30 にbatを実行した場合  
copylog_20200330104845.txt

どなたかご教授いただけると幸いです。


CC BY-SA 4.0
2020-03-30T01:52:49.243
65217
2020-04-01T02:14:14.030
38298
question
windows batch-file
batファイルで robocopy を使用し、データコピーした結果をLOGファイルに出力したい


`robocopy`コマンドの表示を`>NUL
2>&1`とかで抑制するとか、バッチ自身を非表示で実行するとかしていない限り、結果が正常でもエラーでも以下のように何かしら表示されますので、そこから対処を考えてみてください。  
また特に止めなければバッチが終われば表示は消えてしまうので、確認のためには`robocopy`の直後に一時的に`pause`を入れる等してください。

* * *

正常実行時の例：

[code]

     ログ ファイル: C:\Develop\LOG\EXECUTED\COPYLOG_20200401100124.TXT
    
[/code]

* * *

エラー発生時の例：

[code]

    2020/04/01 09:55:51 エラー 3 (0x00000003) ログ ファイルを開いています C:\Develop\LOG\EXECUTED\COPYLOG_20200401095551.TXT
    指定されたパスが見つかりません。
    
    -------------------------------------------------------------------------------
       ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー                    
    -------------------------------------------------------------------------------
    
      開始: 2020年4月1日 9:55:51
       コピー元 - C:\Develop\WORKING\
         コピー先 - C:\Develop\BACKUP\20200401095551\
    
        ファイル: *robo*.*
    
      オプション: /S /DCOPY:DA /COPY:DAT /R:1000000 /W:30
    
    ------------------------------------------------------------------------------
    
    エラー: 無効なパラメーター #5 : "/LOG:LOG\EXECUTED\COPYLOG_20200401095551.TXT"
    
           簡易な使用法 :: ROBOCOPY コピー元 コピー先 /MIR
    
               コピー元 :: コピー元ディレクトリ (ドライブ:\パスまたは \\サーバー
                           \共有\パス)。
               コピー先 :: コピー先ディレクトリ (ドライブ:\パスまたは \\サーバー
                           \\共有\パス)。
                   /MIR :: 完全なディレクトリ ツリーをミラー化します。
    
        詳細な使用方法については、ROBOCOPY /? を実行してください。
    
    
    ****  /MIR はファイルをコピーできるだけでなく、削除もできます。
    
[/code]

* * *

問題無く実行されたとして、ユーザー権限での実行時はバッチファイルの存在するフォルダまたはショートカットやシェル実行で指定した作業フォルダ/管理者権限での実行時はシステムフォルダ、の下に`log\%logdir%\%target%_%ToDay%.txt`が出来ます。探してみてください。

エラー原因で良くあるのが以下の2つです。

  * 出力先パスに指定した途中のフォルダ("LOG"とか"LOG\%logdir%"(を展開したもの))が存在しない
  * フォルダ名に空白が含まれているが、全体を`"`で囲っていない

なおちなみに、質問記事のパス指定方法だと、ログファイル名指定の後ろに付いている`%%~pI %fs_bk% %%~nxI`が意味不明のような気がします。

そしてログファイル名に年月日時分秒を含めているようですが、コピーするファイルが少なくて条件を変えてループ等で複数回動作させている場合、同じ秒の間に複数実行されて上書きされる可能性があるため、`/LOG:`ではなく`/LOG+:`にしておいた方が良いかもしれません。  
例えばこんな記述が考えられます。

[code]

    SET FS_SRC=C:\Develop\WORKING
    SET NAME=robo
    SET LOGDIR=EXECUTED
    SET TARGET=COPYLOG
    SET TODAY=%DATE:/=%%TIME::=%
    SET TODAY=%TODAY: =0%
    SET TODAY=%TODAY:~0,14%
    SET FS_BK=C:\Develop\BACKUP\%TODAY%
    MKDIR %FS_BK%
    ROBOCOPY "%FS_SRC%" "%FS_BK%" "*%NAME%*.*" /S /LOG+:"LOG\%LOGDIR%\%TARGET%_%TODAY%.TXT"
    
[/code]

参考記事：  
[robocopyでバックアップした時のログファイルを日付毎に作成する方法（＋過去の古いファイルの削除方法も）](https://amaotolog.com/backup/entry190.html)


CC BY-SA 4.0
2020-04-01T02:14:14.030
65270
2020-04-01T02:14:14.030
26370
65217
answer