- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-07-24T08:09:27+00:00","default:admin","admin")
#author("2019-08-20T07:26:54+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]]
*遅延環境変数 [#c1a27b2b]
-[[バッチファイル界の魔境『遅延環境変数』に挑む(おまけもあるよ):https://qiita.com/sawa_tsuka/items/c7c477cacf8c97792e17]]
*Tips [#ld93ca8b]
**終了 [#u34f4424]
-[[Windows、バッチファイル(.bat)を終了するときは「exit」ではなく「exit /B」を使おう:http://piyopiyocs.blog115.fc2.com/blog-entry-884.html]]
-[[【バッチ】時刻を比較して処理を終了させる:https://qiita.com/tsuttie/items/619fef8543e192df72c7]]
**日付・時間 [#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
**曜日 [#sa81dd9d]
-[[BATスクリプト 曜日の取得:http://yanor.net/wiki/?Windows/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%20-%20%E3%83%90%E3%83%83%E3%83%81/%E6%9B%9C%E6%97%A5%E3%81%AE%E5%8F%96%E5%BE%97]]
**ファイル検索 [#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"