Edited at

DOSコマンド ファイル名で検索、操作

More than 3 years have passed since last update.

カレントディレクトリから、hogeをファイル名に含むファイルを表示する



dir /A-D /B /S | findstr "hoge[^\\]*$"


解説


dir

ディレクトリを表示。表示させるするディレクトリ名を明示しない場合、カレントディレクトリが表示対象。


/A-D

ディレクトリ以外を取得

/A:Dなら、ディレクトリのみを取得


/B

ディレクトリ名とファイル名のみを表示


/S

サブディレクトリも含めた全てのファイル情報を表示


findstr

文字列や正規表現を使って文字列を検索する


[^\\]

「ディレクトリ区切り文字を含まない」という意味

これをいれないと、ディレクトリ名にhogeを含んだディレクトリがあった場合、それも抽出されてしまう。


$

行末にマッチ

カレントディレクトリから、hogeをファイル名に含むファイルを削除する


抽出したファイルを削除


deletefiles.bat

dir /A-D /B /S | findstr "hoge[^\\]*$" > temp.txt

for /f %%f in (temp.txt) do del "%%f"
del temp.txt


一時ファイルに出力して、それをもとに削除しています。

最後に一時ファイルを削除します。


入力パラメータ

汎用性を持たせるなら、以下のようにするとよいでしょう。


deletefile.bat

@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


上記バッチファイルを所定のフォルダに保存し、実行すれば、そのフォルダ以下のファイルが対象となります。

※検索文字入力で何も入力しないとすべてが対象となってしまうので、その辺考慮したほうがよいです。

直接削除されるのが不安なら、一時フォルダを作成してそこに移動すればよいでしょう。


moveFile.bat

@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

このサンプルですと、すでに移動先ディレクトリがあった場合、その中も移動対象になりますので、その辺考慮する必要はありますが、特定のフォルダの以下の特定のファイル名を含むファイルを抽出したい場合には役に立つかと思います。