如何在命令行中使用 & & & 符号在后台执行批处理文件,但传递参数?
Posted
技术标签:
【中文标题】如何在命令行中使用 & & & 符号在后台执行批处理文件,但传递参数?【英文标题】:How Can I execute a batch file i back ground using & ampersand in command line, but passing parameters? 【发布时间】:2021-08-20 02:10:41 【问题描述】:我有以下批处理文件:
cd C:\myfolder\MyScripts
"C:\Program Files\nodejs\node.exe" runTest.js & %1
%1 是我从 c# 应用程序发送的参数。
& 是一个允许在后台执行进程的命令(这对我来说是强制性的)
我的问题是命令行在与号中停止,并且没有将参数发送到我的文件。 如果我将 "C:\Program Files\nodejs\node.exe" runTest.js %1 & 与与符号放在最后,则该进程不会在后台运行并停止。
有人可以帮我吗?
我需要让进程在后台运行并发送参数。
注意:如果我在批处理文件中硬编码一个值,它可以正常工作,例如:
“C:\Program Files\nodejs\node.exe”runTest.js & 500
但是当我使用语法传递参数值时,它会失败。 非常感谢!
【问题讨论】:
您确定"C:\Program Files\nodejs\node.exe" runTest.js & 500
有效吗?因为在 cmd.exe/batch 文件中 & 号是一个特殊字符,用于连接两个命令,它应该执行"C:\Program Files\nodejs\node.exe" runTest.js
后跟无效命令500
。也许您应该使用插入符号 ^&
转义与号,或者双引号引用参数 "& 500"
或参数 "&" "500"
是的,它有效。执行我的流程并传递参数。 bashitout.com/2013/05/18/Ampersands-on-the-command-line.html 这个尾随的 & 号指示 shell 在后台运行命令,也就是说,它被分叉并在单独的子 shell 中作为作业异步运行。 shell 将立即返回 0 的返回状态为 true 并正常继续,在脚本中处理进一步的命令或将光标焦点返回给 Linux 终端中的用户。
据我所知或可以在网上找到,'&' 不是 windows .cmd 的一部分。在 unix shell 中运行后台作业是标准的,但在 Windows shell 中却不是。这是通过start /min cmd /c mycommand
完成的 - 请参阅serverfault.com/questions/121979/…
您的链接用于bash
,即基于Unix 的Bourne Again SHell,而不是Windows cmd.exe
,即您的标签[cmd],用于您的标签[batch-file] .您确定您没有将bash
与batch
混淆吗? BTW,如果您指的是Windows cmd.exe 和Windows 批处理文件,请查看[shell] 标签的信息,并说明您使用它的原因!
1.打开命令提示符窗口。 2. 输入cd c:\myfolder\MyScripts
,然后按[ENTER]
。 3. 输入"C:\Program Files\nodejs\node.exe" runTest.js & 500
,然后按[ENTER]
。你会清楚地看到会发生什么。 顺便说一句,该链接准确地告诉您我已经告诉您正在发生的事情,它使用与号分隔两个命令,500
不是命令!。此外,正如我已经向您提到的那样,您还没有更正您的标签。
【参考方案1】:
对于所有和我有同样问题的人,这就是我解决它的方法:
我把 cmd 改成 powershell。
所以 C# 代码是这样完成的:
process.StartInfo.FileName = @"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe";
process.StartInfo.Arguments = $"-File \"ScriptNameOne\" \"param1\" \"param2\" \"param3\"";
process.StartInfo.UseShellExecute = true;
process.Start();
我在 powershell 中做了这样的脚本:
param(
[string] $param1,
[string] $param2,
[string] $param3
)
Set-Location "C:\My folder\My other folder"
& "C:\Program Files\nodejs\node.exe" "index.js" $param1 $param2 $param3
并且可以根据我的需要完美运行。
【讨论】:
以上是关于如何在命令行中使用 & & & 符号在后台执行批处理文件,但传递参数?的主要内容,如果未能解决你的问题,请参考以下文章
Linux操作系统中查看用户信息的几种方法 && 如何在 Linux操作系统中 命令行中切换用户登录