我有一个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文件吗?
答案 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_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);