ファイルを移動/圧縮/削除するバッチファイル

ファイルを移動/圧縮/削除するバッチファイル

次の操作を毎日自動的に実行するバッチ スクリプトを作成しようとしています。

  1. 2 日以上経過したファイルをメイン ディレクトリ (Jason) からアーカイブ ディレクトリに移動します。
  2. アーカイブ ディレクトリ内の 1 週間以上経過したファイルを zip 形式で圧縮し、このディレクトリから 6 か月以上経過したファイルを削除します。
  3. このスクリプトを別のディレクトリ (ファイルがあるディレクトリではない) から実行したいと思います。

次のスクリプトを作成しましたが、正しく動作しません。

REM 2日以上経過したファイルをアーカイブディレクトリに移動する
robocopy D:\Agentrics\integration\incoming\Jason D:\Agentrics\integration\incoming\Jason\archive /MOV /MINAGE:2

質問:

  1. 1 週間以上前のファイルを zip 圧縮するように以下のコマンドを変更するにはどうすればよいですか?
  2. 圧縮されたファイルの作成日時が元のファイルと同じになることは可能ですか?
REM バックアップディレクトリ内のすべてのファイルを zip 圧縮する
FOR %%A IN (*.TXT*, *.cpi*) DO "C:\Program Files\WinRAR\WinRAR.exe" a -r "%%~nA.zip" "%%A"
FOR %%A IN (*.TXT, *.cpi) DO DEL "D:\Agentrics\integration\incoming\Jason\archive\.cpi*" "%%A"

REM バックアップディレクトリ内の6か月以上前のファイルをすべて削除します
forfiles /p D:\Agentrics\integration\incoming\Jason\archive /s /m *.* /d -500 /c "cmd /c del /q @path"

答え1

もし私があなただったら、これに for cycle は使いません。@harper が提案した方法の方が良いと思います。しかし、それでも、これがあなたが望んでいた方法です:

REM move files older than 2 days to an archive directory
forfiles /P D:\Agentrics\integration\incoming\Jason /M *.txt /S /D -2 /C "cmd /c move @file D:\Agentrics\integration\incoming\Jason\archive"
forfiles /P D:\Agentrics\integration\incoming\Jason /M *.cpi /S /D -2 /C "cmd /c move @file D:\Agentrics\integration\incoming\Jason\archive"
REM zip all files in the backup directory
for /f "tokens=*" %%a in ('forfiles /p D:\Agentrics\integration\incoming\Jason\archive /s /d -7') do "C:\Program Files\WinRAR\WinRAR.exe" a -r "%%~nA.zip" "%%a"
REM Delete all files in the backup directory that are older than 6 months
for /f "tokens=*" %%a in ('forfiles /p D:\Agentrics\integration\incoming\Jason\archive /s /d -183') do del D:\Agentrics\integration\incoming\Jason\archive\%%a /y

関連情報