我遇到了ss64.com,它为如何编写Windows命令解释器将运行的批处理脚本提供了很好的帮助.
但是,我一直无法找到批处理脚本的语法,扩展或不扩展的方法,以及如何逃避事情的良好解释.
以下是我无法解决的示例问题:
foreach $i (@ARGV) { print '*' . $i ; }
),编译它并以这种方式调用它:
my_script.exe "a ""b"" c"
?输出是 *a "b*c
my_script.exe """a b c"""
?输出它*"a*b*c"
echo
命令如何工作?在那个命令中扩展了什么?for [...] %%I
在文件脚本中使用,但for [...] %I
在交互式会话中?%PROCESSOR_ARCHITECTURE%
字面回声?我发现echo.exe %""PROCESSOR_ARCHITECTURE%
有效,有没有更好的解决方案?%
配对?例:
set b=a
,echo %a %b% c%
?%a a c%
set a =b
,echo %a %b% c%
?bb c%
如果我使用以下Windows批处理代码段并运行它:
echo foo
if 1 == 1 (
echo bar
goto asdf
:asdf
echo baz
) else (
echo quux
)
Run Code Online (Sandbox Code Playgroud)
我期望的输出是:
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)
但相反,我得到:
foo
bar
baz
quux
Run Code Online (Sandbox Code Playgroud)
如果我注释掉该goto asdf
行,它会给出我期望的输出.这echo quux
条线永远不应该被排除,那么为什么goto的存在会导致这种情况发生呢?
更新:对于它的价值,这里是一个正确执行我最初预期的解决方法:
goto BEGIN
:doit
echo bar
goto asdf
:asdf
echo baz
goto :EOF
:BEGIN
echo foo
if 1 == 1 (
call :doit
) else (
echo quux
)
Run Code Online (Sandbox Code Playgroud)
但是,这不符合我原来的问题.