如何批量传递多个参数?

IAd*_*ter 18 windows command-line batch-file

在我的批处理文件中,我想将多个参数传递给其他应用程序.

现在我做到了

app.exe %1 %2
Run Code Online (Sandbox Code Playgroud)

它只能传递两个参数,但我想通过传递给该批次的所有参数(我宁愿不写%1%2%3%4 ...)

有什么神奇的方法可以做到吗?

IAd*_*ter 36

有一种神奇的方式!我知道,但我记不住了.

它的 %*


Sim*_*ell 5

您可以使用SHIFT提示并循环参数。下面是一个演示示例,您可以用加载应用程序的提示替换最终的 ECHO 提示。

@ECHO OFF

SET PARAMS=

:_PARAMS_LOOP

REM There is a trailing space in the next line; it is there for formatting.
SET PARAMS=%PARAMS%%1 
ECHO %1
SHIFT

IF NOT "%1"=="" GOTO _PARAMS_LOOP

ECHO %PARAMS%

PAUSE
Run Code Online (Sandbox Code Playgroud)

如果您需要某种动态参数计数,或者您想禁止某个参数,这可能很有用。


And*_*y M 5

另一种方法是使用双引号参数。当调用其他应用程序时,您只需%~N在命令行上使用设备删除引号即可。

如果您打算传递给应用程序的某些参数本身是双引号的,则这些引号字符必须重复两次。

下面是一个示例脚本,它使用第一个参数作为应用程序的名称,使用第二个参数作为要传递给应用程序的组合参数列表:

@ECHO OFF
CALL %1 %~2
Run Code Online (Sandbox Code Playgroud)

以下是针对不同情况调用脚本的示例(传递一个参数或多个参数或引用的参数)。

  1. 将 1 个参数传递给应用程序:

    C:\>mybatch.bat app.exe "app_param"
    C:\>mybatch.bat app.exe app_param
    
    Run Code Online (Sandbox Code Playgroud)
  2. 传递几个参数:

    C:\>mybatch.bat app.exe "app_param1 app_param2 app_param3"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 传递包含空格的参数(因此必须加引号):

    C:\>mybatch.bat app.exe """parameter with spaces"""
    
    Run Code Online (Sandbox Code Playgroud)
  4. 一个组合示例:一些参数带有空格,其他则没有:

    C:\>mybatch.bat app.exe "param_with_no_spaces ""parameter with spaces"" another_spaceless_param"
    
    Run Code Online (Sandbox Code Playgroud)