@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-d
no directory names, even if they match
/o-n
in the reverse order of name
_
FOR はこの出力を読み取り、プレフィックスとファイル名%%i
の残りの部分を に割り当てます。次に、最後に検出されたプレフィックスが保存されます。次のファイル名に一致するプレフィックスがある場合にのみ実行されます%%j
prefix
%%i
DEL
DEL
ECHO
の前にキーワードを挿入したことに注意してくださいDEL
。万一の際の安全装置です。PROPOSEDDEL
操作は、EXECUTED ではなく、画面に報告されます。バッチが正しいことを確認したら、 を削除するECHO
と、削除操作が続行されます。
注意点:
- 一部のエディターは、末尾のスペースの削除または保持について非常に無頓着です。通常、これは無害ですが
SET
、バッチ内のコマンドの末尾にスペースがあると、混乱が生じる可能性があります。