2016-08-21 72 views
-1

我需要递归删除文件夹的内容,除了特定的扩展名 以防止它被非Office文件溢出。批量删除除递归的某些扩展名以外的所有

我尝试这样做:

@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>,因此它会将文件名分隔空格。另外,如果要递归删除文件,则必须指定/s标志dir。试试这个:

@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