我尝试做类似于Get Visual Studio to run a T4 Template on every build的操作,使用cmd的forfiles
来转换VS2008中的每个模板。在
如果我执行
forfiles /m "*.tt" /s /c "\"%CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\1.2\TextTransform.exe\" @file"
然后我得到TextTransform.exe
的错误消息(解释作为参数传递的内容的文本屏幕)。在
如果我执行
^{pr2}$那么它就完美地工作了。在
为了调试这个程序,我创建了一个简单的命令行程序debugargs
,它简单地打印它接收到的参数数量及其值。然后一些实验表明,直接将命令传递给forfiles
的第一种形式会导致第一个参数被吞并。E、 g
forfiles /m "*.tt" /s /c "debugargs.exe 1 2 3"
输出
2 arguments supplied
#1: 2
#2: 3
我能找到的documentation非常稀少,我不认为有任何可能提到这一点。只是一个模糊的错误,还是我遗漏了什么?在
这似乎是
forfiles
调用.exe
s的一个缺陷。我凭直觉扩展了我的debugargs
程序来打印完整的命令行。在因此,最合适的解决方法是将可执行文件的名称加倍:
^{pr2}$另一种解决方法是使用
cmd /c
调用。但是,请注意,如果您需要引用可执行文件的路径(例如,因为它包含空格),您将需要一个额外的解决方法,在@
前面加上:我也一直在挣扎。我发现的解决方法是在命令和第一个参数之间增加一个额外的空格!所以我想做的是:
python试图查找要执行的文件“arg1”,但如果我将其更改为:
^{pr2}$这真的很管用!在
我在forfiles中也复制了这种行为。您可以在命令之前使用cmd/c来解决问题,或者可以转换到PowerShell,其中等效的命令如下所示(未测试):
比尔
相关问题 更多 >
编程相关推荐