windows - 如何使用 Windows forfiles 命令的完整路径运行命令?

标签 windows batch-file cmd forfiles

我正在尝试运行以下命令:

forfiles /p ..\Schemas /m *.xsd /c "cmd /c ""C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\xsd.exe @path /classes"""

但是,它失败了:

ERROR: Invalid argument/option - 'Files'.
Type "FORFILES /?" for usage.

这些也不起作用:

forfiles /p ..\Schemas /m *.xsd /c "cmd /c \"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\xsd.exe\" @path /classes"

forfiles /p ..\Schemas /m *.xsd /c "cmd /c ^"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\xsd.exe^" @path /classes"

肯定是失败了,因为传递给 cmd 的路径包含空格。你通常通过引用整个论点来解决这个问题。但是,似乎没有办法传递双引号。

那么,如何使用 Windows forfiles 命令的完整路径运行命令?

最佳答案

在您的第一次尝试中,您尝试在 cmd/c 之后在整个命令行周围放置(额外的)引号,而不是仅在可执行文件的路径中放置引号,这将失败,因为 cmd 尝试查找整行并将其作为命令执行。因此,您需要在 xsd.exe 之后立即移动结束引号,而不是在命令行末尾。

不过,总的来说,这里的主要问题是 cmdforfiles 处理引号的方式不同。 forfiles 使用 \" 转义引号,但 cmd 不关心反斜杠。此外,如果您的代码出现在括号内的代码,如果它们没有出现在 cmd 的引号中,您的路径中的文字括号可能会另外引起麻烦。最后,cmd 可能会尝试去除引号(意外),这可能会导致更多问题。

要解决所有这些问题,请使用另一种方法,在/C 之后为命令行提供文字引号: forfiles 支持通过 中的十六进制代码指定字符0xHH 符号;所以声明 0x22 隐藏父 cmd 实例的引号,直到实际执行命令行:

forfiles /p ..\Schemas /m *.xsd /c "cmd /c 0x220x22C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\xsd.exe0x22 @path /classes0x22"

这会导致执行以下命令行(使用 "D:\Data\Schemas\sample.xsd" 作为 @path 的示例值):

cmd /c ""C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\xsd.exe" "D:\Data\Schemas\sample.xsd" /classes"

最后,通过cmd去掉最外层的引号后,执行如下命令行:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\xsd.exe" "D:\Data\Schemas\sample.xsd" /classes

请注意 @path,以及所有其他与文件名和路径相关的 @ 样式的 forfiles 变量扩展为已经引用的值。


最初,我完全忘记了 cmd 试图去除引号这一事实。 Klitos Kyriacouanswer让我想起了那个;所以如果你喜欢我的回答,请不要忘记给他们点赞!

关于windows - 如何使用 Windows forfiles 命令的完整路径运行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39452239/

相关文章:

java - 无法打开使用批处理打开的 Jar 文件,而该文件使用另一个批处理文件打开

c++ - GetAsyncKeyState() - 外部程序干扰它

windows - 如何以编程方式将图像从 Air 应用程序直接导出到 powerpoint 幻灯片

batch-file - 在另一个变量的 SET 语句中使用一个变量

c# - 自行重启应用程序

windows - 输出文件中的文件名排序

python - 如何从 CMD 运行 Pip 命令

windows - cmd 有效,但 C :\Windows\System32\cmd. exe 无效

c++ - CPP Windows : is there a sleep function in microseconds?

windows - 获取磁盘设备的物理设备对象名称