カレントディレクトリから、hogeをファイル名に含むファイルを表示する
dir /A-D /B /S | findstr "hoge[^\\]*$"
#解説
##dir
ディレクトリを表示。表示させるするディレクトリ名を明示しない場合、カレントディレクトリが表示対象。
##/A-D
ディレクトリ以外を取得
/A:Dなら、ディレクトリのみを取得
##/B
ディレクトリ名とファイル名のみを表示
##/S
サブディレクトリも含めた全てのファイル情報を表示
##findstr
文字列や正規表現を使って文字列を検索する
###[^\\\\]
「ディレクトリ区切り文字を含まない」という意味
これをいれないと、ディレクトリ名にhogeを含んだディレクトリがあった場合、それも抽出されてしまう。
###$
行末にマッチ
カレントディレクトリから、hogeをファイル名に含むファイルを削除する
#抽出したファイルを削除
dir /A-D /B /S | findstr "hoge[^\\]*$" > temp.txt
for /f %%f in (temp.txt) do del "%%f"
del temp.txt
一時ファイルに出力して、それをもとに削除しています。
最後に一時ファイルを削除します。
#入力パラメータ
汎用性を持たせるなら、以下のようにするとよいでしょう。
@echo off
echo 削除するファイル名(一部でも可)を入力してください
set /P SEARCHWORD=""
dir /A-D /B /S | findstr "%SEARCHWORD%[^\\]*$" > temp.txt
type temp.txt
echo 上記ファイルを削除しますか?(y/n)
set /P CONFIRM=""
if "%CONFIRM%"=="y" for /f %%f in (temp.txt) do del "%%f"
del temp.txt
上記バッチファイルを所定のフォルダに保存し、実行すれば、そのフォルダ以下のファイルが対象となります。
※検索文字入力で何も入力しないとすべてが対象となってしまうので、その辺考慮したほうがよいです。
直接削除されるのが不安なら、一時フォルダを作成してそこに移動すればよいでしょう。
@echo off
echo 削除するファイル名(一部でも可)を入力してください
set /P SEARCHWORD=""
dir /A-D /B /S | findstr "%SEARCHWORD%[^\\]*$" > temp.txt
type temp.txt
echo 上記ファイルを削除しますか?(y/n)
set /P CONFIRM=""
if "%CONFIRM%"=="y" (
mkdir temp
for /f %%f in (temp.txt) do MOVE /Y "%%f" temp
)
del temp.txt
このサンプルですと、すでに移動先ディレクトリがあった場合、その中も移動対象になりますので、その辺考慮する必要はありますが、特定のフォルダの以下の特定のファイル名を含むファイルを抽出したい場合には役に立つかと思います。