为什么在 Windows 启动命令行中使用 QUOTE 会出现错误?



这是我实际批处理文件的简单得多的实现,但它们的目的是说明我的问题......

我有一个批处理文件,b.cmd,它只是回显输入参数:

REM - *** B.CMD
@echo off
echo %1
echo %~1

我有另一个批处理文件 a.cmd 启动 b.cmd:

REM - *** A.CMD
@echo off
set Location=C:UsersyogiAppDataLocalTemptest
REM - This location could contain spaces, hence on the next line
REM - I am surrounding %Location%b.cmd with QUOTEs.
start "" "%Location%b.cmd" "Input Argument 1"

如果我执行 a.cmd,则会出现错误:

'C:UsersyogiAppDataLocalTemptestb.cmd"  "Input' is not recognized as an internal or external command,
operable program or batch file.

但是,如果我从 a.cmd 中删除 %Location%\b.cmd 周围的引号,我会得到这个(正如我预期的那样(:

"Input Argument 1"
Input Argument 1

我做错了什么?我需要 %Location%\b.cmd 周围的引号以及输入参数,因为它们都可以包含空格。

编辑

这是 a.cmd 的输出。Echo 已打开,b.cmd 被称为 NOT,周围没有引号

C:UsersyogiAppDataLocalTemptest>a.cmd
C:UsersyogiAppDataLocalTemptest>set Location=C:UsersyogiAppDataLocalTemptest
C:UsersyogiAppDataLocalTemptest>start "" C:UsersyogiAppDataLocalTemptestb.cmd "Input Argument 1"
C:UsersyogiAppDataLocalTemptest>

以下是 b.cmd 的输出:

C:UsersyogiAppDataLocalTemptest>echo "Input Argument 1"
"Input Argument 1"
C:UsersyogiAppDataLocalTemptest>echo Input Argument 1
Input Argument 1
C:UsersyogiAppDataLocalTemptest>

这是 a.cmd 的输出。Echo 已打开,b.cmd 称为 AROUND,周围带有引号

C:UsersyogiAppDataLocalTemptest>a.cmd
C:UsersyogiAppDataLocalTemptest>set Location=C:UsersyogiAppDataLocalTemptest
C:UsersyogiAppDataLocalTemptest>start "" "C:UsersyogiAppDataLocalTemptestb.cmd" "Input Argument 1"
C:UsersyogiAppDataLocalTemptest>

以下是 b.cmd 的输出:

'C:UsersyogiAppDataLocalTemptestb.cmd"  "Input' is not recognized as an internal or external command,
operable program or batch file.
C:UsersyogiAppDataLocalTemptest>

这对我有用。

start cmd /C ""%Location%b.bat" "Input Argument 1""

相关内容