0

ホスト: Win 7

私は今日更新した製品を持っています (必要に応じてパッチを適用します)。ベース インストール ディレクトリ ツリーに追加されたファイルを具体的に確認したいと思います。

予想される結果は、作成タイムスタンプと完全なファイル パス/名前のみを表示します。ディレクトリの概要情報やその他のデータの中断を表示したくありません。出力は、次のような非常に単純なリストになります。

08/06/2012  11:02 AM c:\my_product_install_path\folder3\new_file_3.xml
08/06/2012  11:01 AM c:\my_product_install_path\folder2\new_file_2.c
08/06/2012  11:01 AM c:\my_product_install_path\new_file_1.h
...
...

この完全なインストール ディレクトリ ツリーのトップダウン リストから、スクロール ダウンして X より古い最初のファイルを探すことで、古いファイルから新しいファイルを簡単に確認できると思います。

Windows コマンド シェル (または cygwin シェル) でこれを行うにはどうすればよいですか?

「dir /s /b」は非常に近いですが、作成タイム スタンプは表示されません。

/T:C は作成時間を表示するためのものなので、「dir /s /b /T:C」が機能すると思うかもしれませんが、そうではありません。/T:C オプションは、タイムスタンプを表示するために /b オプションを「オーバーライド」しません。そのため、タイムスタンプを追加して /b オプションの利点を得る必要があります。

4

1 に答える 1

2

これはコマンド ラインの面倒なネイティブ ソリューションですが、機能します :-)

for /d /r %F in (.) do @pushd "%F"&(for /f "eol= delims=" %S in ('2^>nul dir /tc /a-d *') do @for /f "tokens=1-4*" %A in ("%S") do @echo %A  %B %C  %~fE)&popd

バッチ ファイルで複数行にわたって書式設定すると、見栄えが良くなります。

@echo off
for /d /r %%F in (.) do (
  pushd "%%F"
  for /f "eol= delims=" %%S in ('2^>nul dir /tc /a-d *') do (
    for /f "tokens=1-4*" %%A in ("%%S") do @echo %%A  %%B %%C  %%~fE
  )
  popd
)

すべての新しいファイルが一番上に集まるように、リストを新しい順に並べ替えることができます。DIR /ODNオプションを使用して、各ディレクトリ内で時系列のソートを行うのは簡単です。しかし、すべてのディレクトリを時系列でソートするのは非常に困難です。そのためには、タイム スタンプ情報を解析し、S​​ORT が時系列のリストを作成できるように再フォーマットする必要があります。残念ながら、タイムスタンプの解析はロケールに大きく依存します。

これは、OP のロケール設定で動作するバッチ ソリューションです。最初に作成タイムスタンプで時系列に並べ替え、次に完全なファイル パスでアルファベット順に並べ替えます。

@echo off
setlocal
set "tempFile=%temp%\listCreateTime%random%.txt"
>"%tempFile%" (
  for /d /r %%F in (.) do (
    pushd "%%F"
    for /f "eol= delims=" %%S in ('2^>nul dir /tc /a-d *') do (
      for /f "tokens=1-6* delims=/ " %%A in ("%%S") do (
        if "%%D"=="12:00" (
          echo %%C%%A%%B%%E00:00%%~fG*%%A/%%B/%%C  %%D %%E  %%~fG
        ) else (
          echo %%C%%A%%B%%E%%D%%~fG*%%A/%%B/%%C  %%D %%E  %%~fG
        )
      )
    )
    popd
  )
)
for /f "tokens=2 delims=*" %%A in ('sort /r "%tempFile%"') do echo %%A
del "%tempFile%"

WMIC を使用して情報を取得およびソートすることもできます。タイムスタンプは、SORT で時系列に並べ替えることができるように既にフォーマットされているため、解析する必要がないため、はるかに簡単です。また、ロケールに依存しません。WMIC をサポートする世界中の Windows マシンで動作するはずです。ただし、この方法は速度が遅く、出力が読みにくくなります。もちろん、追加のコーディングを追加して、タイムスタンプから部分文字列を解析し、より使い慣れた形式に再フォーマットすることもできます。

@echo off
setlocal disableDelayedExpansion
set "tempFile=%temp%\listCreateTime%random%.txt"
>"%tempFile%" (
  for /d /r %%F in (.) do (
    set "folder=%%~pnxF\"
    set "drive=%%~dF"
    setlocal enableDelayedExpansion
    2>nul wmic datafile where "drive='!drive!' and path='!folder:\=\\!'" get name, creationDate|findstr /brc:[0-9]
    endlocal
  )
)
sort /r "%tempFile%"
del "%tempFile%"

タイムスタンプは YYYYMMDDhhmmss.ddddddzzzz です。

  • YYYY = 年
  • MM = 月
  • DD = 日
  • hh = 24 時間形式の時間
  • mm = 分
  • ss = 秒
  • dddddd = マイクロ秒
  • zzzz = GMT との差を分単位で表したタイムゾーン情報
于 2012-08-09T05:21:29.490 に答える