はじめに
Windowsサーバでディスクの容量不足を発見した時、サイズの大きなファイルや指定した日付でファイルを探したいことがあります。
Windows標準コマンドやPowerShellを使うのが一般的なので使い方をまとめておきます。
フォルダ構成
テスト用のフォルダやファイルを準備します。
C:\>tree c:\temp /F
フォルダー パスの一覧: ボリューム OS
ボリューム シリアル番号は 0000DA72 F321:7E69 です
C:\TEMP
│ Photo.png
│
├─Folder1
│ test1.txt
│ test2.txt
│ test3.txt
│
├─Folder2
│ Work.csv
│
└─Folder3
Flattening Guide.pdf
Scripting Guide Errata.pdf
画像カタログ.pdf
forfilesコマンド
forfilesは、条件に合致するファイルに対して処理を行うコマンドです。
オプション | 説明 |
---|---|
/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 の間です。指定がない場合は、"+" が既定で使用されます。 |
指定したサイズのファイルを探す
C:\temp内(サブフォルダも含む)で10MB以上のファイルを探します。
forfilesコマンドとifを組み合わせています。gtrは比較演算子です。
equ(等しい)、neq(等しくない)、gtr(より大きい)、geq(以上)、leq(以下)、lss(より小さい(=未満))
C:\>forfiles /S /P C:\temp /C "cmd /c if @fsize gtr 10000000 echo @fdate @fsize @path"
2021/10/30 17451120 "C:\temp\Folder2\Work.csv"
2001/11/01 10375508 "C:\temp\Folder3\画像カタログ.pdf"
PowerShellだと以下になります。
PS C:\> Get-ChildItem C:\temp -recurse -force | Where-Object Length -ge 10000000 | select LastWriteTime,Length,FullName
LastWriteTime Length FullName
------------- ------ --------
2021/10/30 21:27:23 17451120 C:\temp\Folder2\Work.csv
2001/11/01 12:04:20 10375508 C:\temp\Folder3\画像カタログ.pdf
指定した日付のファイルを探す
2022年4月23日に更新されたファイルを探します。フォルダは対象外です。
C:\>forfiles /S /P C:\temp /D 2022/04/23 /C "cmd /c if @isdir==FALSE echo @fdate @fsize @path"
2022/04/23 8788500 "C:\temp\Folder1\test3.txt"
PowerShellだと以下になります。
PS C:\> Get-ChildItem C:\temp -recurse -force | Where-Object {$_.LastWriteTime -gt [Datetime]"2022/04/23" -and $_.Mode -ne "d-----"} | select LastWriteTime,Length,FullName
LastWriteTime Length FullName
------------- ------ --------
2022/04/23 13:31:51 8788500 C:\temp\Folder1\test3.txt
コメント