windowsのコマンドプロンプトで、指定のフォルダ以下のサブフォルダも含めたファイルを再帰的に検索して、ファイルのフルパスに指定の文字列が含まれ、指定した期間の更新日時のファイルを、1つの指定したフォルダにコピーする。フォルダ構造ごとのコピーではない。

とりあえず動けばいいので、いろいろネットで調べた情報から下記のようなコマンドになりました。

素人ですので、もっといい方法があるかも?

 

コマンド   

@for /F %x in ('dir /s /b C:\ ^| find "\test\" ^| find "txt"') do @if "%~tx" geq "2020/10/13 00:00" @if "%~tx" leq "2020/10/13 18:00" @copy %x C:\test /y

 

説明

・@は実行したときにifコマンドが表示されないようにしている

・基本はfor do 

 ・/Fはよくわからないが、inの中でコマンドが使える。

  ・%xは変数。マッチしたファイル。

  ・inの中で調べる複数のファイルを指定

    ・dir /s /b でサブフォルダを含む再帰的なファイルの一覧を取得

    ・C:\は検索するフォルダ。例ではCドライブ全部。

    ・^|はパイプ。^を付けないと動かない。詳しくはわからない。

    ・findでファイルフルパスの文字列を検索。例ではフルパスに\test\とtxtを含む

  ・do以下は処理。

 

・処理ではif文。更新日にマッチしたらcopyを行う。

  ・%~txはファイル%xの更新日時

    ""を付けているのは文字列として日時を比較するため

  ・geqは以上、leqは以下

  ・条件を満たしたらcopy

  ・%xはファイルを示す変数

  ・C:\testはコピー先のフォルダ。例ではCドライブのtestフォルダ。

  ・/yはコマンドプロンプトにファイルを上書きするかどうかを表示させない。です。