我有一个工作的、简单的批处理文件cmd。
D:\Software\MySoftware.exe --process MyConfig.tuc
当我试图在Powershell中使用Invoke-Expression或调用操作符"& "来复制时,代码执行了,但日志显示它没有接收到开关: --process MyConfig.tuc。
Invoke-Expression "D:\Software\MySoftware.exe --process MyConfig.tuc"
或
& D:\Software\MySoftware.exe --process MyConfig.tuc
编辑:我发现,如果你传递了.tuc文件的完整路径,命令就会成功。
Invoke-Expression "D:\Software\MySoftware.exe --process D:\Software\MyConfig.tuc"
我的问题是,为什么Invoke-Expression需要配置文件的完整路径,而批处理文件不需要。 正如 @compo 在评论中所说,这可能是由于 PS 或 cmd 在相对路径方面的工作方式的不同。
@compo提出了更中肯的意见,即Start-Process是一个更好的解决方案,我发现它确实如此。 它不仅可以工作,它的开关很适合我的需求,尤其是它Invoke-expression做的-wait是原生不做的(我无法确认它是否可以wait,网上有建议说可以)。
Start-Process -FilePath D:\Software\MySoftware.exe -WorkingDirectory D:\Software -ArgumentList "--process MyConfig.tuc" -wait