Я пытаюсь сделать что-то похожее на Get Visual Studio to run a T4 Template on every build, используя cmd's forfiles
, чтобы преобразовать каждый шаблон в VS2008.Почему forfiles проглатывает первый аргумент команды?
Если я исполняю
forfiles /m "*.tt" /s /c "\"%CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\1.2\TextTransform.exe\" @file"
тогда я получаю TextTransform.exe
«s сообщение об ошибке (экран текста, объясняющий, что передать его в качестве аргументов).
Если я вместо этого выполнить
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"
дает OUTPUT
2 arguments supplied
#1: 2
#2: 3
documentation Я был в состоянии найти достаточно редкие, и я не вижу никакого упоминания об этом как возможность. Это просто непонятная ошибка, или я чего-то не хватает?
Интересно. Все образцы, которые я вижу в Интернете, используют '/ c" cmd/c ... "'; ни один из них не вызывает отдельный exe напрямую. –
Странно.Я обнаружил, что если EIRER из первых двух параметров является EXE, тогда EXE будет запускать и принимать оставшиеся аргументы (например, param3 +). Если, однако, аргументы являются .BAT, тогда будет выполняться SECOND, получая параметры 3+ – Magoo
@PeterWright, интересно наблюдение. Это немного сложнее. Смотря только в случаях, когда вторым параметром является 'exe': если первый параметр не является файлом, я получаю' ERROR: система не может найти указанный файл. '. Если первый параметр является, например, текстовый файл, который я получаю «ERROR:« test.txt », не является допустимым исполняемым». Таким образом, единственный манекен, который действительно работает, - это существующий файл '.bat' или' .cmd'. Bizarre. –