参数包含引号和空格(来自.NET框架)时运行批处理文件

时间:2009-05-06 15:22:12

标签: batch-file

我有一个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"

我正在尝试使用以下命令从.NET框架应用程序调用.bat:

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

但我似乎无法使逃脱正常工作。有人能告诉我如何输入字符串cmd以正确地将命令作为参数传递给bat文件吗?

2 个答案:

答案 0 :(得分:1)

答案可能为时已晚,但对其他人有用。

我只用一个参数调用批处理 - 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"

答案 1 :(得分:0)

为什么不使用Process类启动ProcessStartInfo

它有一个EnvironmentVariables属性,您可以在运行前设置some_varanother_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);