我正在尝试使用cmd的
如果我执行
forfiles
来转换VS2008中的每个模板,类似于Get Visual Studio to run a T4 Template on every build。如果我执行
forfiles /m "*.tt" /s /c "\"%CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\1.2\TextTransform.exe\" @file"
然后我收到 TextTransform.exe
的错误信息(一屏幕文字说明需要传递的参数)。
如果我执行以下操作:
forfiles /m "*.tt" /s /c "cmd /c echo Transforming @path && \"%CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\1.2\TextTransform.exe\" @file"
然后它就完美地工作了。
为了调试这个问题,我创建了一个简单的命令行程序,名为debugargs
,它只打印它接收到的参数数量和它们的值。然后一些实验表明,直接将命令传递给forfiles
的第一种形式会导致第一个参数被吞噬。例如:
forfiles /m "*.tt" /s /c "debugargs.exe 1 2 3"
给出输出
2 arguments supplied
#1: 2
#2: 3
我能找到的文档非常有限,也没有提到这种可能性。这只是一个不常见的错误吗,还是我漏掉了什么?
exe
的情况:如果第一个参数不是文件,则会出现“ERROR: The system cannot find the file specified.”。如果第一个参数是例如文本文件,则会得到“ERROR: "test.txt" is not a valid executable.”因此,在那里真正起作用的唯一虚拟文件是现有的.bat
或.cmd
文件。奇怪。 - Peter Taylor