【发布时间】:2019-03-23 22:42:43
【问题描述】:
这是我实际批处理文件的更简单的实现,但它们的目的是说明我的问题...
我有一个批处理文件 b.cmd,它只是简单地回显输入参数:
REM - *** B.CMD
@echo off
echo %1
echo %~1
我有另一个启动 b.cmd 的批处理文件 a.cmd:
REM - *** A.CMD
@echo off
set Location=C:\Users\yogi\AppData\Local\Temp\test
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:\Users\yogi\AppData\Local\Temp\test\b.cmd" "Input' is not recognized as an internal or external command,
operable program or batch file.
但是,如果我从 a.cmd 中删除 %Location%\b.cmd 周围的 QUOTE,我会得到这个(如我所料):
"Input Argument 1"
Input Argument 1
我做错了什么?我需要 %Location%\b.cmd 周围的引号以及输入参数,因为它们都可能包含空格。
已编辑
这是 a.cmd 的输出。 Echo 已开启,并且 b.cmd 被调用且周围没有引号:
C:\Users\yogi\AppData\Local\Temp\test>a.cmd
C:\Users\yogi\AppData\Local\Temp\test>set Location=C:\Users\yogi\AppData\Local\Temp\test
C:\Users\yogi\AppData\Local\Temp\test>start "" C:\Users\yogi\AppData\Local\Temp\test\b.cmd "Input Argument 1"
C:\Users\yogi\AppData\Local\Temp\test>
这是 b.cmd 的输出:
C:\Users\yogi\AppData\Local\Temp\test>echo "Input Argument 1"
"Input Argument 1"
C:\Users\yogi\AppData\Local\Temp\test>echo Input Argument 1
Input Argument 1
C:\Users\yogi\AppData\Local\Temp\test>
这是 a.cmd 的输出。 Echo 已开启,并且 b.cmd 被调用并带有引号:
C:\Users\yogi\AppData\Local\Temp\test>a.cmd
C:\Users\yogi\AppData\Local\Temp\test>set Location=C:\Users\yogi\AppData\Local\Temp\test
C:\Users\yogi\AppData\Local\Temp\test>start "" "C:\Users\yogi\AppData\Local\Temp\test\b.cmd" "Input Argument 1"
C:\Users\yogi\AppData\Local\Temp\test>
这是 b.cmd 的输出:
'C:\Users\yogi\AppData\Local\Temp\test\b.cmd" "Input' is not recognized as an internal or external command,
operable program or batch file.
C:\Users\yogi\AppData\Local\Temp\test>
【问题讨论】:
-
因为你的路径和参数都有空格,它会触发错误。一种解决方法是使用
call
标签: batch-file