@vscarp

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

更新日時を指定したフォルダの圧縮コマンドについて

解決したいこと

運用しているシステムで、サーバ内のドライブに毎日日付フォルダが生成され、
その中にログが出力されています。
更新日時が3日より前のフォルダを圧縮し、
別フォルダへコピーし、圧縮前のフォルダは削除するコマンドを作成したいのですが、
圧縮がうまくいかない状況です。
解決方法を教えていただければ幸いです。

発生している問題・エラー

スクリーンショット 2023-01-30 004039.png

自分で試したこと

フォルダの削除については下記コマンドで成功したのですが、
forfiles /p "D:\wk" /D -4 /c "cmd /c IF @isdir==TRUE rmdir /S /Q @file"

圧縮については下記コマンドでは、Unsupported commandとなってしまいました。
記述方法が誤っていますでしょうか。
forfiles /p "D:\wk" /D -4 /c "cmd /c IF @isdir==TRUE D:\wk\7-Zip\7z.exe @path"

可能であれば7-zipを使用したいのですが、他の圧縮方法でも構いません。
またn日より前の更新日時を指定して圧縮できれば、forfilesにはこだわりません。

フォルダ構成は以下のようになっております。

D:\WK
|_20230127 ⇒20230127.zipに圧縮し、D:\wk2へコピー
|_20230128
|_20230129
|_20230130

D:\wk2

以上、よろしくお願いいたします。

0 likes

4Answer

7z.exeのコマンドラインへの理解が必要かと(単純にフォルダ指定しただけではNGのようです)。

あたりを見て試してみてください。

0Like

ご回答ありがとうございます。
7zipのコマンドを見直し、以下コマンドで圧縮することはできました。
forfiles /p "D:\test\wk" /D -3 /c "cmd /c IF @isdir==TRUE D:\test\7-Zip\7z.exe a @path"

ただ、コマンド実行後のフォルダ構成は以下で、20230127が圧縮されたのはいいのですが、
圧縮対象がD:\WK下の全てのファイル、フォルダが対象となってしまっています。

D:\WK
|_20230127
|_20230128
|_20230129
|_20230130
|_20230127.7z

20230127のみを圧縮対象としたいので、forfiles、7zipのコマンドオプションを調べていますが、まだ解決できていません。
20230127のみを圧縮対象とするには、どのオプションをつければよいかご存じでしょうか。

ちなみに以下コマンドで検索すると、「20230127」のみが検索されます。

forfiles /p "D:\test\wk" /D -3 /c "cmd /c IF @isdir==TRUE echo @path"

0Like

(すみません、誤った回答をしたので削除、再投稿します)

forfiles /p "D:\wk" /c "cmd /c IF @isdir==TRUE \"C:\Program Files\7-Zip\7z.exe\" a -tzip @path.zip @path"

当方の環境では、アーカイブファイル名@path.zipを指定するとうまくいきました。
(上記の場合、/Dオプションはつけていませんので、各フォルダを圧縮します)

0Like

Comments

  1. 蛇足ですが、更新日での抽出は扱いにくいかなと思います(事実、とても試験がしにくい)。

    せっかくフォルダ名称が年月日になっているので、その名称でどうにかできれば、皆幸せになれるかと。

@imagou

ありがとうございます!
@path.zipをつけることで、希望している動作を実現できました。

テストがしにくいというのはおっしゃる通りです。
今後改善していければと思います。

非常に助かりました、重ね重ねありがとうございました。

0Like

Your answer might help someone💌