在 CMD 中使用“开始”运行另一个程序,如何将参数传递给被调用的程序?

在 CMD 中使用“开始”运行另一个程序,如何将参数传递给被调用的程序?

我想调用另一个程序并在运行时返回,我可以使用这个

start /MIN "Updating Local Utilities" UPutils ^&^& exit

并且效果很好。

但我想将参数传递给已启动的实例。

这些方法不起作用:

rem pass along literal parameters
start /MIN "Updating Local Utilities" UPutils C:\source  c:\Target  ^&^& exit

rem pass along dynamic parameters
start /MIN "Updating Local Utilities" "UPutils %Source% %Target%"  ^&^& exit

但这就是我想要的想法。

我的接收程序(UpUtils.bat)会简单地将它们用作 %1 和 %2 参数

Echo %1
Echo %2

谢谢

答案1

好的。有时你只是想完成它!

站在巨人的肩膀上(此处)......

大部分代码都是直接在此论坛中回答的问题的结果!感谢大家如此乐意地传授知识。

涉及三个文件。第一个批处理文件启动另一个批处理文件。第三个文件是传递的参数的存储位置。我仍然希望有一种方法可以更轻松地使用 START 命令传递参数,但有时...

PassArgs.bat --> RecArgs.bat 存储库.ARGS

以下是传球计划:

@echo off
echo  ---- PassArgs.bat ----
 Echo Arg1 >  Repository.ARG
 
 Echo Arg2 >> Repository.ARG

 start "Passing Arguments" RecArgs ^&^& exit

 ((((echo Just waiting for...) & echo RecArgs ) & echo Oh look. It's done!.) & echo.)|MSG /time:5 *

 echo That's All Folks!
 echo.

以下是接收批处理程序:

@echo off
echo ---- RecArgs.bat ----
  cd /d "%~dp0" && setlocal EnableDelayedExpansion

  for /f ^tokens^=*delims^= %%i in ('type Repository.ARGS')do set /a "_c+=1+0" && <con: set "Arg!_c!=%%~i"

  for /l %%l in (1 1 !_c!)do echo\Arg%%l=!Arg%%l!

  %__AppDir__%timeout.exe -1 & endlocal & goto=:EOF


  echo Arg1=%Arg1%
  echo Arg2=%Arg2%

  Echo  I got them!
  echo.

pause

最终结果是参数 Arg1 和 Arg2 传递给 STARTed 程序。

Arg1="Arg1"
Arg2="Arg2"

答案2

您无法将参数传递给已启动的程序实例,现在运行不同的start语句将使用新参数创建该程序的新实例。据我所知,这几乎是不可能的,并且对于像 Batch 这样的语言来说,这简直是开发人员的噩梦。

相关内容