4

dir abc*.*/o:-d/b >> "testfile1.txt"出力を降順で取得するために使用しています。出力として 5/10 ファイルのみを取得する方法はありますか。実際には、testfile1.txt に最新の 5 つのファイル (更新日順) を保存したいと考えています。

あなたの反応に感謝します

4

3 に答える 3

8
@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 ステートメントを使用することもできますが、それには展開の遅延が必要であり、展開の遅延により、!. 遅延拡張を使用する適切なソリューションでは、ループ内で遅延拡張のオンとオフを切り替える必要があります。

于 2012-08-13T12:33:43.000 に答える
3

私はこれに少し遅れていることを知っていますが、代わりにこれはどうですか:

@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"

これを機能させるために私がしたことは次のとおりです。

  • dir ステートメントを findstr にパイプして各行に番号を付けました ( dir abc*.*/o:-d/b | findstr /n . )
  • forループを実行して、行番号をコンテンツから分離しました("tokens=1* delims=:"を使用)
  • if ステートメントを使用して、現在の行番号が「5」以下であることを確認しました ( if %%a leq 5... )
  • 指定したファイルに一致するすべての行をエクスポートしました ( echo.%%b>>"testfile1.txt" )

編集:findstr /n .*」を「findstr /n」に変更。'、注意すべき空行がないため (以下のコメントを参照)。

于 2012-10-26T07:07:19.043 に答える
0

これバッチファイルである必要がありますか? これは、PowerShell では簡単です。

普通の古いバッチ ファイルでこれを行うには、出力の最初の数行だけを取得するために、 head ユーティリティに似たものが必要になります。

ここでソリューションをニーズに合わせて調整できます (小さな「winhead.cmd」スクリプトに関する回答のセクションに注意してください): 入力から最初の行のみを取得するバッチ コマンド

于 2012-08-13T08:56:06.100 に答える