我创建了一个接受命令行参数的c# wpf应用程序。如果我打开cmd并使用多个参数调用该应用程序,则这些参数被正确传入。
但是如果我做同样的事情,但是从一个批处理文件中,它将参数作为一个组合在一起的参数传递,而不是多个参数。我让应用程序输出参数,看起来所有的空格(分隔每个命令行参数的空格)都变成了奇怪的á
字符。为了正确传递参数,我需要做些什么吗?
我已经尝试用ASCII编码重新保存文件,但这并没有改变任何东西。我还尝试将此行添加到批处理文件中
chcp 1253>NUL
这改变了它,所以á
不在那里,但它仍然有它是一个参数。看起来这些空间并没有被当做一个空间来传递。
下面是我的批处理文件行的样子,每个参数都用空格分隔。
start /wait C:\MyTestApp.exe /SILENT /BOOLAGREEMENT=TRUE /BOOLGAOPTIN=TRUE
--UPDATE--添加重现步骤...
这只是类似于我刚才所做的压缩的泛型代码
创建c# wpf应用程序。
在App.xaml.cs中覆盖OnStartup
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;
bool shutdownapp = false;
MessageBox.Show(string.Join(",", e.Args));
}
构建exe。
现在启动cmd和cd到exe所在的位置。
MyTestApp.exe /param1=test1 /param2=test2
您应该会看到一个消息框,上面写着
/param1=test1,param2=test2
现在创建一个批处理文件,其内容类似于this...then run it
test.bat
@echo off
start /wait c:\MyTestApp.exe /param1=test1 /param2=test2
这一次,消息框应该有这样的内容.../param1=test1/param2=test2
发布于 2019-08-14 18:33:26
Start将所有这一切视为启动的CMD。
有没有真正需要使用start的原因?通常情况下,没有,您可以直接调用可执行文件。
例如TestMyApp.cmd
@(
SETLOCAL
ECHO OFF
)
REM Call your Command here with all arguments:
"C:\MyTestApp.exe" /SILENT /BOOLAGREEMENT=TRUE /BOOLGAOPTIN=TRUE
如果您真诚地要求开始。
然后您应该意识到,它将所有命令视为单个字符串,这就是您遇到的情况,因此在这种情况下,您应该显式调用一个新的CMD实例:
START "" /WAIT CMD /C ""C:\MyTestApp.exe" /SILENT /BOOLAGREEMENT=TRUE /BOOLGAOPTIN=TRUE"
但如果不需要的话,这会有很多额外的工作要做。
或者,您也可以直接运行CMD实例:
CMD /C ""C:\MyTestApp.exe" /SILENT /BOOLAGREEMENT=TRUE /BOOLGAOPTIN=TRUE"
或者使用CALL:
调用"C:\MyTestApp.exe“/SILENT /BOOLAGREEMENT=TRUE /BOOLGAOPTIN=TRUE
https://stackoverflow.com/questions/57499670
复制