2016-08-21 15 views
-1

特定の拡張子 を除いて、フォルダの内容を再帰的に削除して、オフィス以外のファイルでオーバーフローしないようにする必要があります。特定の拡張子以外のすべてを再帰的に削除するためのバッチ

私はこの試みた:

@echo off 
SET ROOTDIR=E:\Testdel\ 
for /f %%F in ('dir %ROOTDIR% /b /a-d ^| findstr /vile ".xls .xlt .xlm .xlsx .xlsm .xltx .xltm .ppt .pot .pps .pptx .pptm .potx .ppam .ppsx .sldx .sldm .pdf .xls .doc .dot .docx. .html .docm .dotb .docb .tiff .jpg .png .cdr .cpt .psd"') do del "%%F" 

をしかし、それはエラーを出力します

Could Not Find C:\Users\username\New

任意のアイデアなぜですか?

+2

ROOTDIRを 'E:\ Testdel \'に設定した場合、エラーメッセージは 'C:\ Users \ username \ New'が見つからないことをどのように伝えることができますか?フォルダまたはファイル 'New'は実際に存在しますか?または、その名前はスペースで分割されていますか?私はこのコードは名前のスペースを処理していないと思います。 – Phil1970

答えて

1

これは、デフォルトの区切り文字がdelim=<tab><space>であるため、ファイル名をスペースで区切るためです。また、ファイルを再帰的に削除する場合は、dirのフラグを/sに指定する必要があります。これを試してみてください:

@echo off 
set ROOTDIR=E:\Testdel\ 
for /f "delims=" %%F in ('dir %ROOTDIR% /s /b /a-d ^|findstr /vile ".xls .xlt .xlm .xlsx .xlsm .xltx .xltm .ppt .pot .pps .pptx .pptm .potx .ppam .ppsx .sldx .sldm .pdf .xls .doc .dot .docx .html .docm .dotb .docb .tiff .jpg .png .cdr .cpt .psd"') do del "%%F" 

注: Wikibooks - Windows Batch Scripting: Switches一般は、スイッチは単一のスラッシュの後ろに蓄積することができないことを言及しています。また、findstrコマンドが例外であり、/v /i /l /eがショートカットとして/vileに結合されることを許可します。これは、ここでの注文は問題ではないことを意味し、/vile = /live =他の注文(これはMofiで指摘されています)。これをサポートする他のコマンドがあるかもしれませんが、例外であるためスイッチを分離するのが良い方法です。これはすべての場合に機能し、混乱を少なくします。

+0

こんにちは..このソリューションは、日本や中国などの非ローマ字のファイルで動作しません。もし私が100MB以上の別のルールを追加したいのであればどうしますか? – denywinarto

関連する問題