在您的第一次尝试中,您尝试在整个命令行后面添加(额外的)引号cmd /c
而不仅仅是可执行文件的路径,这将失败cmd
尝试查找整行并将其作为命令执行。因此,您需要立即移动收盘价xsd.exe
而不是在命令行的末尾。
然而,总的来说,这里的主要问题是cmd
and forfiles
以不同方式处理引号。forfiles
uses \"
为了逃避引用,但是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
试图去掉引号。克里托斯·基里亚库 https://stackoverflow.com/users/638028's answer https://stackoverflow.com/a/39454641让我想起了这一点;所以如果你喜欢我的回答,请不要忘记给他们点赞!