日付に基づいてディレクトリ内のファイルを検索する方法はありますか?作成日が特定の日付よりも大きいすべてのファイルを検索したいのですが、コマンドで検索できますdir
か?
5 に答える
forfiles
コマンドを発見しました。
forfiles /s /m *.log /d -7 /c "cmd /c echo @path"
作成日を確認していないように見えますが、すべてのサブディレクトリで、7日以上経過して変更されたすべてのログファイルが一覧表示されます。特定の日付の指定をサポートしています。
詳細については、を参照forfiles /?
してください。
dir
それ自体では日付でフィルタリングすることはできませんが、dir
usingfor
コマンドの出力を解析することはできます。お住まいの国dir
で日付をYMD形式で印刷する場合は、指定された日付と比較するだけで済みます。日付部分の順序が異なる場合は、別のfor
コマンドを使用して日付を解析し、YMDに変更する必要があります。これにより、2月5日以降に変更されたファイルのリストが表示されます。
@Echo Off
for /f "usebackq tokens=1,4 skip=5" %%A in (`dir /-c`) do (
if %%A GTR 2012-02-05 echo %%A %%B
)
if
標準の文字列比較を行うため、要約行が比較に合格した場合、最後に追加の行を取得できます。それを避けるために、あなたは使うことができますif %%A GTR 2012-02-05 if exist %%B echo %%A %%B
編集:出力の解析を回避dir
し、日付だけでなく時間による検索も可能にするさらに優れたアプローチがあります:
@Echo Off
for /r %%A in (*) do (
if "%%~tA" GTR "2012-02-05 00:00" echo %%~tA %%A
)
私にとってより簡単な方法は次のようなものです
dir /s *.xlsx | find "07/14/2016"
私の知る限りではできませんが、この種の考え方は機能しますが、日付範囲が短い場合を除いて、実際には役に立ちません;)
for /R %a in (01 02 03 04 05) do dir | find "02/%a/2012"
これは、PowerShellで簡単に実行できます。あなたの質問はcmdに関するものだったと思いますが、PSはWindows7以降に含まれています。XPおよびVistaにもインストールできます。
Get-ChildItem
コマンド(別名)を使用して、dir
すべてのファイルを取得します。Where-Object
出力をコマンド(別名)にパイプして、日付が特定?
の日付よりも大きい()ファイルを返します。-gt
Powershell 2.0(Windows 7のデフォルト)の場合、スクリプトブロックを使用する必要があります。
dir -file | ? {$_.LastWriteTimeUtc -gt ([datetime]"2013-05-01")}
Powershell 3.0(Windows 8のデフォルト)以降では、代わりに次の単純な構文を使用できます。
dir -file | ? LastWriteTimeUtc -gt ([datetime]"2013-05-01")
このdir -file
コマンドは、System.IO.FileInfo
オブジェクトのコレクションを返します。このファイルオブジェクトには、複雑なフィルタリングに使用できる多くのプロパティ(ファイルサイズ、作成日など)があります。ドキュメントについては、 MSDNを参照してください。