我试图做一个简单的脚本,将输出所有子文件夹的名称,除了一个。我无法通过字符串比较来删除该文件夹。比较ForFiles的输出
这里有一个基本的文件夹细分:
- Ç
- 备份
- .SYNC
- 文件夹1
- 文件夹2
- 备份
下面是工作90%的代码,一个基本的例子:
ForFiles /P C:\Backup /C "CMD /C echo @FILE"
下面是此命令的输出(引号是在输出本身):
".sync"
"folder1"
"folder2"
为了简要说明代码,基本上ForFiles将运行给定路径(由/P C:\Backup
指定)中的文件和子文件夹。 /C
然后指定一个命令,该命令用双引号 - echo @FILE
将输出文件的名称。我正在运行的实际代码比这更复杂,但作为显示我的问题的最低示例,这已经足够了。我不想输出.sync文件夹的名称,因为它被另一个程序使用,不应该被触摸。
所以,我想要做的是在命令中放置一个“if”语句,以便不会输出所有内容。在伪代码中,这将是“如果文件夹的名称不是.sync,则输出文件夹的名称”。然而,这似乎更复杂,因为引号,我想我必须逃脱 - 但我没有任何运气。这里有一些事情我已经试过:
- 输出的所有文件,包括.SYNC:
ForFiles /P C:\Backup /C "CMD /C if NOT @FILE == .sync echo @FILE"
ForFiles /P C:\Backup /C "CMD /C if NOT @FILE == ".sync" echo @FILE"
ForFiles /P C:\Backup /C "CMD /C if NOT @FILE == '.sync' echo @FILE"
- 给人的双重的,因为一个错误双引号(一种转义双引号的方法,在Stack Overflow上找到)
ForFiles /P C:\Backup /C "CMD /C if NOT @FILE == "".sync"" echo @FILE"
- 输出的所有文件,包括。同步 - 使用^符号是转义双引号我对堆栈溢出发现的另一种方法,它似乎只有第一个实际上是被转义出于某种原因
ForFiles /P C:\Backup /C "CMD /C if NOT @FILE == ^".sync^" echo @FILE"
灿任何人都会给我提供一些关于如何使用acrobat来建议的建议?谢谢!
不确定您为什么使用FORFILES。 FOR命令将工作得很好,运行速度会更快。 – Squashman
感谢您的建议 - 幸运的是,对于我来说,并不是所有这些文件都可以通过,所以FORFILES在速度上运行良好。我使用它,因为我在这里找到了答案:http://stackoverflow.com/questions/51054/batch-file-to-delete-files-older-than-n-days - 虽然我的问题中的脚本没有提到“删除N天以前的文件”部分,这就是我最终希望我的脚本所做的事情。 – Jake