Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 使用批处理脚本删除目录中除.bak.$av和.pen之外的所有文件_Batch File_Extension Methods_Delete File - Fatal编程技术网

Batch file 使用批处理脚本删除目录中除.bak.$av和.pen之外的所有文件

Batch file 使用批处理脚本删除目录中除.bak.$av和.pen之外的所有文件,batch-file,extension-methods,delete-file,Batch File,Extension Methods,Delete File,我想知道如何删除每个扩展名的文件(使用批处理脚本),但扩展名为.bak、.av和.pen的文件除外。在试用之前,请备份您的文件,以免永远丢失数据 注意:使用风险自负,它会大量删除所有内容 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 MapD

我想知道如何删除每个扩展名的文件(使用批处理脚本),但扩展名为.bak、.av和.pen的文件除外。在试用之前,请备份您的文件,以免永远丢失数据

注意:使用风险自负,它会大量删除所有内容

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%

您没有指定希望使用的操作系统或脚本语言,这会有所帮助

然而,这里有一个相当通用的脚本类型

一种相当普遍的方法是创建子文件夹,复制或移动要保留在子文件夹中的文件,删除要清除的文件夹中的所有文件,然后将保存在子文件夹中的文件移回原始文件夹

大多数“删除文件”命令类型旨在让您指定要删除的文件,而不是不想删除的文件

实际上,对于这个问题,我想知道为什么这不是delete命令的一个很好的扩展

现在,如果您需要执行文件树删除操作,即遍历文件目录层次结构以删除除要保留的文件以外的文件,那么这将有点困难。一种方法是遍历文件树并对每个目录执行相同的操作

另一个选项是生成文件夹中所有文件的列表,并使用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