これはコマンド ラインの面倒なネイティブ ソリューションですが、機能します :-)
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
オプションを使用して、各ディレクトリ内で時系列のソートを行うのは簡単です。しかし、すべてのディレクトリを時系列でソートするのは非常に困難です。そのためには、タイム スタンプ情報を解析し、SORT が時系列のリストを作成できるように再フォーマットする必要があります。残念ながら、タイムスタンプの解析はロケールに大きく依存します。
これは、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 との差を分単位で表したタイムゾーン情報