#author("2019-07-23T04:45:22+00:00","default:admin","admin") -[[開発に役立つ,BATファイルの書き方・パターン集 (コマンドプロンプトの定石を体系的に学び,バッチ中級者になろう):https://language-and-engineering.hatenablog.jp/entry/20130502/PatternsOfMSDOSorBAT#VariablesAndCalculation]] -[[【bat】Windowsのバッチファイル(*.bat)の書き方自分用まとめ:https://qiita.com/sksmnagisa/items/8c4c1788af44cc1dc63a]] -[[Windows Serverで動作する、バックアップ+世代管理してくれるバッチファイル:https://ameblo.jp/welx/entry-11060432960.html]] -[[Windows PowerShellを使ってデータファイルを圧縮するバッチを作成してみた:https://www.casleyconsulting.co.jp/blog/engineer/233/]] -[[簡易バックアップの世代管理:https://plaza.rakuten.co.jp/tebukko/diary/201209030000/]] -[[【bat】経過日数およびファイル数で古いファイルを削除する方法:https://mitosuya.net/delete-old-file]] *Tips [#ld93ca8b] **終了 [#u34f4424] -[[Windows、バッチファイル(.bat)を終了するときは「exit」ではなく「exit /B」を使おう:http://piyopiyocs.blog115.fc2.com/blog-entry-884.html]] **日付・時間 [#nced1683] -[[バッチファイルで日付(yyyymmdd)、時間(hhmiss)を取得する:https://kuroeveryday.blogspot.com/2014/02/GetDateTime.html]] --年 %DATE:~-10,4% --月 %DATE:~-5,2% --日 %DATE:~-2% --時 %TIME:~0,2% --分 %TIME:~3,2% --秒 %TIME:~6,2% -1週間前の日付の文字列を取得 --[[バッチとPowerShellで昨日の日付を取得する:https://www.greptips.com/posts/801/]] FOR /F "usebackq delims=" %%a in (`powershell "(get-date).AddDays(-7).ToString(\"yyyy-MM-dd\")"`) do Set TARGET_DATE=%%a **ファイル検索 [#g3e883bb] -[[windosの指定日付より前のファイルを削除する:https://qiita.com/gitya107/items/a11deb3d83d8d624175c]] **ファイル処理 [#s05059ca] -[[Windowsのforfilesコマンドで条件に合うファイルを取り出して処理する:https://www.atmarkit.co.jp/ait/articles/0902/27/news132.html]] ***forfiles [#hc3fc8c5] C:\>forfiles /? FORFILES [/P パス名] [/M 検索マスク] [/S] [/C コマンド] [/D [+ | -] {yyyy/MM/dd | dd}] 説明: ファイル (または、ファイルのセット) を選んで、そのファイル上の コマンドを実行します。これはバッチ ジョブの使用に便利です。 パラメーター一覧: /P パス名 検索を開始するパスを示します。 既定のフォルダーは現在実行中の ディレクトリ (.) です。 /M 検索マスク 検索マスクによってファイルを検索します。 既定の検索マスクは '*' です。 /S サブディレクトリに対しても処理を行うように forfiles に 指示します (例: "DIR /S")。 /C コマンド 各ファイルの実行するコマンドを示します。 コマンドの文字列は二重引用符で囲んでくだ さい。 既定のコマンドは "cmd /c echo @file" です。 次の変数をコマンドの文字列に使用することができ ます: @file - フィルの名前を返します。 @fname - 拡張子なしのファイル名を 返します。 @ext - ファイルの拡張子だけを返し ます。 @path - ファイルの完全なパスを返します。 @relpath - ファイルの相対パスを返し ます。 @isdir - ファイルの種類がディレクトリの場合 は "TRUE"を、ファイルの場合は "FALSE" を返します。 @fsize - ファイルのサイズをバイトで返し ます。 @fdate - ファイルの最終更新日を返し ます。 @ftime - ファイルの最終更新時刻を返し ます。 コマンド ラインに特殊文字を使用する場合は、 文字を 16 進数コードで 0xHH 形式で (例: タブは 0x09) 指定してください。CMD.EXE の 内部コマンドの前には "cmd /c" が必要 です。 /D 日付 最終更新日が指定された日かもしくはそれ 以降 (+)、または指定された日またはそれ 以前 (-) であるファイルを "yyyy/MM/dd" 形式を使っ て選択します。または、最終更新日が現在 の日にちより "dd" 日あと、もしくは "dd" 日 前であるファイルを選択します。有効な "dd" 値は 0 から 32768 の間です。 指定がない場合は、"+" が既定で使用さ れます。 /? ヘルプまたは使用法を表示します。 例: FORFILES /? FORFILES FORFILES /P C:\WINDOWS /S /M DNS*.* FORFILES /S /M *.txt /C "cmd /c type @file | more" FORFILES /P C:\ /S /M *.bat FORFILES /D -30 /M *.exe /C "cmd /c echo @path 0x09 was changed 30 days ago" FORFILES /D 2001/01/01 /C "cmd /c echo @fname is new since Jan 1st 2001" FORFILES /D +2019/7/23 /C "cmd /c echo @fname is new today" FORFILES /M *.exe /D +1 FORFILES /S /M *.doc /C "cmd /c echo @fsize" FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file" ***サンプル)過去ファイル削除 [#u409884c] rem ************************************************ @echo 引数1:対象フォルダ @echo 引数2:ファイルパターン @echo 引数3:経過日数 rem ************************************************ @echo off set PARAM_ALL_SET=TRUE if "%~1" == "" set PARAM_ALL_SET=FALSE if "%~2" == "" set PARAM_ALL_SET=FALSE if "%~3" == "" set PARAM_ALL_SET=FALSE if %PARAM_ALL_SET%==FALSE ( @echo usage: delete_old_files 対象フォルダ ファイルパターン 経過日数 exit /B ) if not exist "%1\" ( @echo 存在しないフォルダが指定されました exit /B ) @echo 引数1のフォルダ内の、引数2のパターンに合致するファイルの、引数3で指定した日数が経過したファイルを削除します forfiles /p %1 /m %2 /d -%3 /c "cmd /c del @file"