Windows批处理脚本中%1和%1%之间有区别吗?

Ale*_*lex 1 windows batch-file

我正在努力理解批处理脚本之间%1%1%批处理脚本之间的区别,但是在SO中给出的解释没有意义,是错误的,或者我有完全的误解或者测试脚本工作不正确.

在Windows 7上,我使用的是此处给出的脚本:

@echo off
set Name=Amit
set 1=First
set 2=Second
echo My own environmental variables are:
echo Name=%Name%, 1=%1%, 2=%2%"
echo The user invoked this batch file with a parameter of %1
Run Code Online (Sandbox Code Playgroud)

它给出了以下输出:

> tester.bat
My own environmental variables are:
Name=Amit, 1=2"
The user invoked this batch file with a parameter of .
Run Code Online (Sandbox Code Playgroud)

> tester.bat test
My own environmental variables are:
Name=Amit, 1=test2"
Run Code Online (Sandbox Code Playgroud)

我的结论:%1并且%1%是等价的.是这样吗?用户使用test参数调用了此批处理文件.

.


正如foxidrive所建议的那样:

@echo off
echo %1% abc %2%
pause
echo %1 abc %2
pause
Run Code Online (Sandbox Code Playgroud)

运行为tester.bat aaa bbb给出第一个输出:aaa2和第二个输出aaa abc bbb.

fox*_*ive 7

是的,%1%语法不正确.

像这样启动此批处理文件以查看它如何影响脚本:file.bat aaa bbb

@echo off
echo %1% abc %2%
pause
echo %1 abc %2
pause
Run Code Online (Sandbox Code Playgroud)

以下是上述控制台输出:

aaa2
Press any key to continue . . .
aaa abc bbb
Press any key to continue . . .
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为该术语%1% abc %2%被解析为%1
,然后调用的环境变量% abc %在上面的场景中没有定义,
加上a 2%被丢弃的孤独.