拡張子が.bak、。$ av、.penのファイルを除くすべての拡張子のファイルを(バッチスクリプトを使用して)削除する方法を知りたいです。
3 に答える
試してみる前に、データが永久に失われないように、ファイルのバックアップを作成してください。
注:自己責任で使用してください。すべてを大量に削除します。
SET /p ExcludeFiles = What file type should be kept (NOT deleted)? Type the file name(s) inside parantheses.
Example: (bak) or ($av pen)
SET /p MapDrive = What drive letter is the folder in?
Example: c or n
SET /p Directory = Drag the folder you would like to modify into this command prompt then press ENTER.
%MapDrive%:
cd %Directory%
attrib +a *.* /s
echo %date%
for %%i in %ExcludeFiles% do attrib -a *.%%i /s
echo %date%
del %Directory%\*.* /s /a:a /q
echo %date%
attrib +a %Directory%\*.* /s
echo %date%
使用するオペレーティングシステムやスクリプト言語を指定しないと便利です。
ただし、これはかなり一般的な用語での汎用タイプのスクリプトです。
かなり一般的なアプローチは、サブフォルダーを作成し、保持するファイルをサブフォルダーにコピーまたは移動し、クリアするフォルダー内のすべてのファイルを削除してから、サブフォルダーに保存したファイルをに戻すことです。元のフォルダ。
ほとんどのファイルの削除タイプのコマンドは、削除したくないファイルではなく、削除したいファイルを指定するように設計されています。
そして実際にこの質問で、なぜそれが削除コマンドの良い拡張ではないのか疑問に思っています。
ここで、ファイルツリーの削除を行う必要がある場合は、ファイルディレクトリ階層をトラバースして、保持したいファイル以外のファイルを削除することを意味しますが、これは少し難しくなります。これを行う1つの方法は、ファイルツリーをトラバースし、各ディレクトリでこれと同じアクションを実行することです。
もう1つのオプションは、フォルダー内のすべてのファイルのリストを生成し、sedなどのユーティリティを使用してファイルリストを変更し、アドホックなオンザフライスクリプトを作成して実行することです。このスクリプトはユーティリティによって変更されるため、保持するファイルはリストから削除され、削除するファイルでは、リスト内のそのファイル名の行が変更されて削除が実行されます。
ただし、オンザフライのスクリプト実行メソッドをデプロイする前に、本格的なテストを行うことは間違いありません。
FINDSTRを使用して、特定の拡張子を持つファイル名を無視します。DIR / Bの結果をFINDSTRにパイプし、FOR/Fを使用して結果を処理します。
for /f "eol=: delims=" %%F in ('dir /b /a-d^|findstr /vire "\.bak \.\$av \.pen"') do @del "%%F"
コマンドラインから実行する場合は、に変更%%F
し%F
ます。