我正在嘗試使用cmd的forfiles
來執行類似Get Visual Studio to run a T4 Template on every build的操作來轉換VS2008中的每個模板。爲什麼forfiles吞下命令的第一個參數?
如果我執行
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
的documentation我已經能夠找到相當稀疏,我沒有看到這個任何提及的可能性。這只是一個晦澀的錯誤,或者我錯過了什麼?
有趣。我在網上看到的所有樣本都使用'/ c「cmd/c ...」';他們都沒有直接調用一個單獨的exe文件。 – 2013-04-04 17:35:47
奇怪。我發現如果前兩個參數中的任何一個都是EXE,那麼EXE將運行並接收其餘參數(即param3 +)。但是,如果參數是.BAT,那麼SECOND將運行,接收參數3+ – Magoo 2013-04-04 17:49:12
@PeterWright,有趣的觀察。這似乎稍微複雜一些。只查看第二個參數是'exe'的情況:如果第一個參數不是文件,我會得到'ERROR:系統找不到指定的文件.'。如果第一個參數是例如我得到一個文本文件'錯誤:「test.txt」不是一個有效的可執行文件。「因此,真正有效的唯一虛擬文件是現有的'.bat'或'.cmd'文件。離奇。 – 2013-04-05 10:12:06