首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ForFiles输出的比较

ForFiles输出的比较
EN

Stack Overflow用户
提问于 2016-01-01 21:45:59
回答 3查看 627关注 0票数 0

我正在尝试创建一个简单的脚本,它将输出所有子文件夹的名称,除了一个。我在进行字符串比较以删除那个文件夹时遇到了问题。

下面是一个基本的文件夹分解:

  • C
    • 备份
      • .sync
      • folder1
      • folder2

下面是一个基本的代码示例,它可以工作90%:

代码语言:javascript
复制
ForFiles /P C:\Backup /C "CMD /C echo @FILE"

下面是这个命令的输出(引号在输出本身中):

代码语言:javascript
复制
".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"

  • 给出一个错误,因为双引号(一种转义双引号的方法,在堆栈溢出上找到)
    • ForFiles /P C:\Backup /C "CMD /C if NOT @FILE == "".sync"" echo @FILE"

  • 输出所有文件,包括.sync --使用^符号是我在堆栈溢出中找到的另一种转义双引号的方法,而且似乎只有第一个文件因为某种原因而被转义了,。
    • ForFiles /P C:\Backup /C "CMD /C if NOT @FILE == ^".sync^" echo @FILE"

有人能给我一些关于如何解决这个问题的建议吗?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-01 21:59:29

代码语言:javascript
复制
ForFiles /P u:\Backup /C "CMD /C echo @FILE|find /v /i "".sync"""

为我工作,用我的u:驱动器。毫无疑问,它也会过滤掉*.sync* --如果这是或任何关注的话。

票数 1
EN

Stack Overflow用户

发布于 2016-01-02 07:07:27

要在/C开关forfiles之后转义命令中的双引号,有两种可能:

代码语言:javascript
复制
forfiles /P "C:\Backup" /C "CMD /C if @isdir==TRUE if /I not @file==\".sync\" echo @file"

forfiles /P "C:\Backup" /C "CMD /C if @isdir==TRUE if /I not @file==0x22.sync0x22 echo @file"

第一种变体可能更明显,但文献却不多。

第二个变体使用"的十六进制字符代码。虽然这可能更难阅读,但我建议使用此方法,因为它隐藏了命令解释器cmd中嵌套的引号;\"变体可能会混淆cmd,因为\转义应用于forfiles而不是cmd,因此它识别了"

我强烈建议将开关/I添加到if命令中,以便以区分case _ in _ in的方式对文件/目录路径进行比较,因为Windows并不关心路径中的情况。

如您所见,我插入了另一条if语句:我在整个命令行前面插入了if @isdir==TRUE,以过滤掉所有文件,因为您只想输出一个文件夹(目录)列表。

票数 0
EN

Stack Overflow用户

发布于 2016-01-02 12:22:26

据我所知,除了.sync备份之外,您只想列出C:\Backup下的所有dirs,对吗?下面是执行此操作的代码:

代码语言:javascript
复制
dir /ad /b C:\Backup | find /V ".sync"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34560371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档