@ECHO OFF
SETLOCAL enabledelayedexpansion
::
:: establish target directory
:: initialise PREFIX to a name that's invalid in a filename
::
SET target=.
SET prefix=:
FOR /f "tokens=1*delims=_" %%i IN (
'dir /b/a-d/o-n "%target%\*_*.xml'
) DO (
IF !prefix!==%%i ECHO DEL "%target%\%%i_%%j"
SET prefix=%%i
)
この解決策は、ターゲット ディレクトリ内の *xml ファイルの名前に「_」が含まれていることに依存しています。バッチ開発ディレクトリのいくつかのダミーファイルでテストした.ため、the current directory
DIR コマンドは、パターンに一致するターゲット ディレクトリ内のファイルのリストを*_*.xml生成し/bます。filename only/a-dno directory names, even if they match/o-nin the reverse order of name_
FOR はこの出力を読み取り、プレフィックスとファイル名%%iの残りの部分を に割り当てます。次に、最後に検出されたプレフィックスが保存されます。次のファイル名に一致するプレフィックスがある場合にのみ実行されます%%jprefix%%iDELDEL
ECHOの前にキーワードを挿入したことに注意してくださいDEL。万一の際の安全装置です。PROPOSEDDEL操作は、EXECUTED ではなく、画面に報告されます。バッチが正しいことを確認したら、 を削除するECHOと、削除操作が続行されます。
注意点:
- 一部のエディターは、末尾のスペースの削除または保持について非常に無頓着です。通常、これは無害ですが
SET
、バッチ内のコマンドの末尾にスペースがあると、混乱が生じる可能性があります。