在批处理文件参数中保留"="(相等)字符

Flo*_*ges 11 windows batch-file

我写了一个批处理文件来启动一个应用程序(该应用程序不是我的,我不能修改它).批处理文件本身接受一些参数.该应用程序接受其他参数.批处理文件使用SHIFT消耗其所有选项,然后使用正确的环境启动应用程序并将其余参数传递给应用程序.调用批处理文件的示例:

script.bat -opt-1 -opt-2 /opt-a /opt-b=value
Run Code Online (Sandbox Code Playgroud)

在该示例中,script.bat使用"-opt-1"和"-opt-2".最后,它必须使用参数"/ opt-a"和"/ opt-b = value"调用原始应用程序.应用程序期望最后一个参数中的"="符号,我无法更改它.当我直接从命令行调用应用程序时,它运行良好.

但是当我从脚本调用它时,应用程序会收到"/ opt-b = value"的两个参数:"/ opt-b"和"value".如果我在调用应用程序时使用"%*",则会保留"="符号,但会传递所有参数(包括使用SHIFT跳过的参数).

有没有办法只传递最后一个参数并保留"="符号?

Aac*_*ini 5

script.bat这种方式打电话:

script.bat -opt-1 -opt-2 /opt-a "/opt-b=value"
Run Code Online (Sandbox Code Playgroud)

在里面script.bat,以这种方式调用应用程序:

rem Consume -opt-1
shift
rem Consume -opt-2
shift
rem Call the application
application %1 %~2
Run Code Online (Sandbox Code Playgroud)

编辑:回应评论

好.让我们详细了解这个问题.

下面的script.bat文件:

@echo off
rem Consume -opt-1
shift
rem Consume -opt-2
shift
rem Call the application
ECHO application %1 %~2
Run Code Online (Sandbox Code Playgroud)

(请注意ECHO命令)正确地"调用"应用程序时,第二个参数包括等号,当第四个参数用引号括起来时,如下一个屏幕输出所示:

C:\> script.bat -opt-1 -opt-2 /opt-a "/opt-b=value"
application /opt-a /opt-b=value
Run Code Online (Sandbox Code Playgroud)

但是,如果应用程序是一个BATCH文件,那么它会遇到原始script.bat文件的相同问题.你说"当我直接从命令行调用应用程序时,它运行良好".嗯,这不是真的:

C:\> type application.bat
@echo off
rem ** application.bat **
echo 1: %1
echo 2: %2
echo 3: %3
echo 4: %4 

C:\> application /opt-a /opt-b=value
1: /opt-a
2: /opt-b
3: value
4:
Run Code Online (Sandbox Code Playgroud)

除了空格和制表符之外,批处理文件的参数可以用逗号,分号或等号分隔.这样,如果应用程序需要"The"="登录最后一个参数",那么应用程序就无法成为批处理文件,并且无法使用批处理文件而不是应用程序来测试此方法.

您是否使用真实应用程序测试了此解决方案?