我想删除目录 A 中存在的文件(如果它们存在于目录 B 中),如下所示
A\dir1\fileA
A\dir1\fileB
A\dir2\fileC
A\dir3\fileD
B\dir9\fileA
B\dir8\fileF
B\dir3\fileB
B\dirWhatEver\fileZ
我希望从目录 A 中删除文件 A 和文件 B,而不删除任何子目录,只删除使用命令行或 Windows 中的批处理文件的文件
编辑:我可以从一个目录中获取 dir /b /s 的结果并将其与另一个目录的结果进行比较,然后从第一个结果中删除匹配的内容
编辑:for %F in (A\"*") do @if exist "B\%F" del "%F"
没有用,我认为它没有在 B 子目录中查找,它只是在查找 B
并且 A 目录和 B 目录中有空格
答案1
对于您的特定目标,您肯定只想找到一个专用的工具。我记得看到过一个名为 YAFF(Yet Another File Finder)的程序,之所以有这个名字,是因为还有其他程序。(这是我的主要简短完整答案。我的答案的其余部分是对一些替代方案的讨论。)
如果您不喜欢 YAFF,请搜索“文件查找器”或“重复数据删除”/“重复数据删除”或“查找重复项”,我想您会找到很多结果。(对于程序员来说,在开始学习递归和文件处理后,创建重复数据删除是一件很有趣的事情,因此很多人都为这样的事情编写了工具。)重复数据删除也是许多人谈论的文件系统功能和备份软件的功能,因此您可能会得到很多关于您没有询问的那些主题的讨论,但也会找到您要做的事情。
我做过类似的事情,如果 B\dir1\fileA 存在,我可以对文件执行某些操作(包括删除它,或使用“echo”命令并写入文本文件,或任何我想要的操作)到 A\dir1\fileA。为此,我使用了 JP Software 的命令提示符(以前通常是 4DOS,但现代的等效命令是 TCC/LE),并使用内部变量来引用完整文件名(%@full)和子字符串/等。我从未存储源代码,因为我擅长在需要时花三分钟重新创建它。例如:global /i for %%X in (。) 如果存在DIRB \ %@substr[something%@full[.]] echo DIRB \ %@substr[something%@full[.]] 则执行任何操作(或@instr)... “something”需要根据公共路径的长度进行定制。
通过使用“for”进入任何子目录,可以支持可能不同的子目录。如果子目录名称不同,您可能需要使用 GLOBAL/i,这是 JP Software 产品的内部命令,上次我检查时(多个操作系统之前)CMD 中没有内置等效命令。我确信可以制作一些东西(也许:全局,如果存在,则写入已知名称的临时文件;然后如果该临时文件存在,则删除。)