如何从多个驱动器上的不同目录中删除具有特定名称的文件,但一个目录除外?

时间:2018-01-08 17:33:11

标签: batch-file

我需要同时从不同位置删除特定文件。但我想保留特定目录中的文件。

例如:我的文件名是ABC.txt,它存在于多个驱动器(C:D:E:)的多个目录中,但我想保留档案C:\temp\ABC.txt

如何做到这一点?

1 个答案:

答案 0 :(得分:0)

使用此简单的一行批处理文件从驱动器ABC.txtC:D:上的每个目录中删除E:,但C:\temp\ABC.txt除外:< / p>

@for /F "delims=" %%I in ('dir "C:\ABC.txt" "D:\ABC.txt" "E:\ABC.txt" /A-D /B /S 2^>nul') do @if /I not "%%I" == "C:\temp\ABC.txt" del /F "%%I"

Faster是一个包含多个命令的批处理文件:

@echo off
for /F "delims=" %%I in ('dir "C:\ABC.txt" /A-D /B /S 2^>nul') do if /I not "%%I" == "C:\temp\ABC.txt" del /F "%%I"
del /F /S "D:\ABC.txt" >nul 2>&1
del /F /S "E:\ABC.txt" >nul 2>&1

在驱动器C:上,命令 DIR 由命令 FOR 在后台执行的单独命令进程中执行,以查找名为{{1}的所有文件在此驱动器上的任何目录中具有适当的目录列表权限。由 DIR 逐行输出的找到文件列表 文件路径+文件名+文件扩展名由 FOR

捕获

此文件名列表由 FOR 逐行处理,首先比较不区分大小写的当前文件的名称,其中包含完整路径,文件的完整文件名永不删除。如果比较的字符串不相等,则根据NTFS权限和共享文件访问权限完全可以删除列表中的当前文件。

在其他驱动器ABC.txtD:上,使用所有子目录中的 DEL 命令直接删除文件E:,这使得多线解决方案更快。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • ABC.txt
  • del /?
  • dir /?
  • echo /?
  • for /?

另请阅读Microsoft有关Using Command Redirection Operators的文章,了解if /?>nul2>&1的说明。重定向运算符2>nul必须使用 FOR 命令行上的插入符>进行转义,以便在执行命令之前Windows命令解释程序处理此命令行时将其解释为文字字符FOR ,它在后台启动的单独命令进程中执行嵌入式^命令行。