如何在命令行中使用 & & & 符号在后台执行批处理文件,但传递参数?

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] .您确定您没有将bashbatch 混淆吗? 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操作系统中 命令行中切换用户登录

linux 如何保证使程序后台运行(nohup &)

在命令行中输入啥以在散景服务应用程序中运行 spark?我是不是只需用 && 分隔两个命令行条目?

Linux命令行中执行多个命令

使用 python 运行命令行操作

在命令行中执行 flyway 回调