web-dev-qa-db-ja.com

コマンドラインを使用して日付で検索する

日付に基づいてディレクトリ内のファイルを検索する方法はありますか?特定の日付よりも大きい作成日を持つすべてのファイルを検索したいのですが、dirコマンドで実行できますか?

14
Karim Harazin

dir自体は日付でフィルタリングできませんが、dirコマンドを使用してforの出力を解析できます。お住まいの国で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
)
5
MBu

forfilesコマンドを発見しました。

forfiles /s /m *.log /d -7 /c "cmd /c echo @path"

7日以上前に変更されたすべてのログファイルがすべてのサブディレクトリに一覧表示されますが、作成日は表示されません。特定の日付の指定をサポートします。

見る forfiles /?詳細については。

39
Dave

まあ、あなたは私の知る限りではできませんが、この種の思考は機能しますが、短い日付範囲がない限り、まだ本当に役に立ちません;)

for /R %a in (01 02 03 04 05) do dir | find "02/%a/2012"
3
Justin

私にとって簡単な方法は次のようなものです

dir /s *.xlsx | find "07/14/2016"
3
skelly

これはPowerShellで簡単に行えます。あなたの質問はcmdに関するものでしたが、PSはwindows 7以降に含まれています。 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 [〜#〜] を参照してください。

0
bouvierr