LoginSignup
31

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-06-23

カレントディレクトリから、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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31