我不明白这些人。
有一个.exe,它简单地将所有参数写入控制台。
>my.exe "1 2" "3 4"
param[0]=my.exe
param[1]=1 2
param[2]=3 4
有一个.bat文件
set EXE="my.exe"
set A=%~dp1
set B=%~n1.pre.xml
echo 1=%1
echo EXE=%EXE%
echo A=%A%
echo B=%B%
"%EXE%" -p %A% -o %B%
运行bat文件,输出:
1="C:\Users\xx yy\AppData\Roaming\aaaa\p_27."
EXE="my.exe"
A=C:\Users\xx yy\AppData\Roaming\aaaa\
B=p_27.pre.xml
param[0]=my.exe
param[1]=-p
param[2]=C:\Users\xx
param[3]=yy\AppData\Roaming\aaaa\
param[4]=-o
param[5]=p_27.pre.xml
好的,所以它在空间分开了路径。我想要的,不要分开路径!简单,只需使用引号:
"%EXE%" -p %A% -o %B%
--->
"%EXE%" -p "%A%" -o %B%
但输出是灾难性的:
1="C:\Users\xx yy\AppData\Roaming\aaaa\p_27."
EXE="my.exe"
A=C:\Users\xx yy\AppData\Roaming\aaaa\
B=p_27.pre.xml
param[0]=my.exe
param[1]=-p
param[2]=C:\Users\xx yy\AppData\Roaming\aaa" -o p_27.pre.xml
??????到底是怎么回事? 只有关闭引号被添加到第二个参数,其余的参数被合并到第二个??
如何获得此输出:
param[0]=my.exe
param[1]=-p
param[2]=C:\Users\xx yy\AppData\Roaming\aaaa\
param[3]=-o
param[4]=p_27.pre.xml
答案 0 :(得分:0)
set "EXE=my.exe"
set "A=%~dp1"
set "B=%~n1.pre.xml"
echo 1=%1
echo EXE=%EXE%
echo A=%A%
echo B=%B%
"%EXE%" -p "%A%" -o "%B%"
1 =“C:\ Users \ xx yy \ AppData \ Roaming \ aaaa \ p_27。”
EXE = my.exe
A = C:\ Users \ xx yy \ AppData \ Roaming \ aaaa \
B = p_27.pre.xml
“my.exe”-p“C:\ Users \ xx yy \ AppData \ Roaming \ aaaa \” - o“p_27.pre.xml”
答案 1 :(得分:0)
问题是以反斜杠结尾的路径。
当你调用.exe
文件时,你的参数从批处理的角度被正确引用,但是可执行文件将检索完整的命令行并使用它自己的解析器(通常使用标准的C解析器)按照rules与批处理文件中的不同。
此解析器会将\"
视为转义引用,因此,在您的情况下,它不是第二个参数的结尾,而是第二个参数中包含的引用,一直持续到下一个引用或者命令行结束。
"my.exe" -p "C:\Users\xx yy\AppData\Roaming\aaaa\" -o p_27.pre.xml
^0 ^1 ^2 ^escaped ^end of 2nd arg
要使其正常工作,请删除结尾反斜杠,如果无法删除则将其加倍\\"
。这样,解析器将在结束引用之前看到转义的反斜杠。