2017-04-01 24 views
0

Windowsのdirコマンドによって生成された出力から特定のディレクトリの作成日を抽出しようとしました。dir出力の現在のディレクトリと一致する正規表現パターン

例:

dir c:\folder\Myfolder\ /T:C /A:D

出力:

22-11-2013 15:09 <DIR>   . 
22-11-2013 15:09 <DIR>   .. 
21-03-2015 14:32 <DIR>   Folder1 
12-09-2014 11:03 <DIR>   Folder2 
18-10-2016 13:29 <DIR>   Folder3 

Iは、正規表現を使用するためにfindstrにパイプへの出力を試みました。しかし、dir c:\folder\Myfolder\ /T:C /A:D | findstr \r "\."は、...の両方の行を示しています。

このフォルダのタイムスタンプを作成するには、Myfolderの日付と時刻(つまり、.という1つの行)が必要です。

答えて

1
dir c:\folder\Myfolder\ /ad /t:c|findstr /L /e /c:" ." 

は終わり/c:" ."文字列定数スペースであなたのdesireedデータ

ます。findstr /Lリテラル/eが得られるはずです。

+0

'/ L'オプションは傷つけることはできませんが、'/C'はデフォルトのリテラル検索を仮定すると冗長です。同等の正規表現は 'findstr/rc:" \。$ "'です。 – dbenham

+0

@Magooご意見ありがとうございます – Steve

3

最後の書き込み時間は、パイプをfindstrにする必要はありません。フォルダのタイムスタンプを取得するためにfor交換可能なパラメータの~t修飾子を使用

for /d %%a in ("c:\folder\Myfolder") do echo %%~ta 

と同じ情報を取得することができます。

しかし、この方法ではフォルダ作成時間を取得することはできません(Magooコメントなど)。それを取得するには、あなたの独創的なアプローチを維持する必要があります

dir /tc /ad "c:\folder\Myfolder\.?" | findstr /e /c:" \." 

に(

それともwmicを使用することができます(.?findstrによってフィルタリングされるリストとdirで列挙時間を短縮するだけです)この場合、それは)バックスラッシュを倍増、フォルダの命名形式を変更するには、この場合には

wmic fsdir where name="c:\\folder\\Myfolder" get CreationDate /value 

必要がある、あなたは

のようなものを取得します
CreationDate=20160927171354.871547+120 
+0

これは元のコードのように、時間の最後に書かれたものであり、時間のないものです。 – Magoo

+0

@Magoo、もちろんあなたは正しいです、私は 'timestamp'を見て自動的に私の心を' Last write time'に切り替えました。 –

+0

ありがとう@MCND。この解決策は機能します。私はすでにバッチファイルで 'wmic'オプションを使用していましたが、多くのフォルダで' wmic'を呼び出すのはむしろ遅いです。したがって、私は 'dir'を使うことを選んでいました。 – Steve

関連する問題