dir abc*.*/o:-d/b >> "testfile1.txt"
出力を降順で取得するために使用しています。出力として 5/10 ファイルのみを取得する方法はありますか。実際には、testfile1.txt に最新の 5 つのファイル (更新日順) を保存したいと考えています。
あなたの反応に感謝します
dir abc*.*/o:-d/b >> "testfile1.txt"
出力を降順で取得するために使用しています。出力として 5/10 ファイルのみを取得する方法はありますか。実際には、testfile1.txt に最新の 5 つのファイル (更新日順) を保存したいと考えています。
あなたの反応に感謝します
@echo off
setlocal
set /a "n=0, limit=5"
>"testfile1.txt" (
for /f "eol=: delims=" %%F in ('dir /o-d /b abc*.*') do (
echo %%F
2>nul set /a "n+=1, 1/(limit-n)"||goto :break
)
)
:break
制限に達したことを検出するために、意図的に 0 で除算します。代わりに単に IF ステートメントを使用することもできますが、それには展開の遅延が必要であり、展開の遅延により、!
. 遅延拡張を使用する適切なソリューションでは、ループ内で遅延拡張のオンとオフを切り替える必要があります。
私はこれに少し遅れていることを知っていますが、代わりにこれはどうですか:
@echo off
for /f "tokens=1* delims=:" %%a in ('dir abc*.*/o:-d/b ^| findstr /n .') do if %%a leq 5 echo.%%b>>"testfile1.txt"
これを機能させるために私がしたことは次のとおりです。
編集:「findstr /n .*」を「findstr /n」に変更。'、注意すべき空行がないため (以下のコメントを参照)。
これはバッチファイルである必要がありますか? これは、PowerShell では簡単です。
普通の古いバッチ ファイルでこれを行うには、出力の最初の数行だけを取得するために、 head ユーティリティに似たものが必要になります。
ここでソリューションをニーズに合わせて調整できます (小さな「winhead.cmd」スクリプトに関する回答のセクションに注意してください): 入力から最初の行のみを取得するバッチ コマンド