Запускать пакетный файл, когда аргумент содержит кавычки и пробелы (из .NET Framework) - PullRequest
1 голос
/ 06 мая 2009

У меня есть bat-файл, который устанавливает некоторые переменные окружения, а затем выполняет команду в командной строке. Я хочу заменить жестко запрограммированную команду на команду, переданную через параметр.

Итак:

:: Set up the required environment
SET some_var=a
SET another_var=b
CALL some.bat

:: Now call the command passed into this batch file
%1

Проблема в том, что команда сложная и не может быть чисто чистой. Это выглядит так:

an.exe -p="path with spaces" -t="some text" -f="another path with spaces"

Я пытаюсь вызвать .bat из приложения .NET Framework, используя:

Dim cmd as String = "the cmd"
System.Diagnostics.Process.Start( thebat.exe, cmd )

но я не могу заставить экранирование работать правильно. Может кто-нибудь сказать мне, как вводить строку cmd, чтобы правильно передать команду в файл bat в качестве аргумента?

Ответы [ 2 ]

1 голос
/ 11 февраля 2010

Ответ может быть слишком поздно, но может быть полезным для кого-то еще.

Я бы назвал пакет только с одним параметром - путь к params.txt, который содержит все остальные параметры:

start /min cmd /c "thebat.bat C:\My Documents\params.txt"

Затем прочитайте их все в пакете:

for /f "tokens=1,*" %%A in ('type "%*"') do set P%%A=%%B
echo Options:
echo P1=%P1%
echo P2=%P2%
echo P3=%P3%

params.txt:

1 "path with spaces"
2 "some text"
3 "another path with spaces"
0 голосов
/ 06 мая 2009

Почему бы не запустить Process с классом ProcessStartInfo?

Он имеет свойство EnvironmentVariables, в котором вы можете задавать some_var, another_var и т. Д. Прогроматически перед запуском.

ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "an.exe";
psi.Arguments = "-p=\"path with spaces\" -t=\"some text\" -f=\"another path with spaces\"";
psi.EnvironmentVariables["some_var"] = "a";
...
Process.Start(psi);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...