#author("2019-07-23T04:45:22+00:00","default:admin","admin")
#author("2019-07-24T08:09:27+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

**ファイル検索 [#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"


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS