Lau*_*arn 1 batch-file parentheses
这段代码的括号出现了奇怪的事情:
Setlocal EnableDelayedExpansion
MyFOLDER=
FOR %%B IN (c,d,e,f,g) DO (@%%B: 2>nul && set z=%%B <nul if exist %z%\
(if %MYFOLDER%==[] (echo %z%
)
)
)
Run Code Online (Sandbox Code Playgroud)
以上编译,但这不是:
Setlocal EnableDelayedExpansion
MyFOLDER=
FOR %%B IN (c,d,e,f,g) DO (@%%B: 2>nul && set z=%%B <nul if exist %z%\
(if %MYFOLDER%==[] (
echo %z%
)
)
)
Run Code Online (Sandbox Code Playgroud)
也不是这个
Setlocal EnableDelayedExpansion
MyFOLDER=
FOR %%B IN (c,d,e,f,g) DO (@%%B: 2>nul && set z=%%B <nul if exist %z%\
(if %MYFOLDER%==[]
(
echo %z%
)
)
)
Run Code Online (Sandbox Code Playgroud)
也不是"echo%z%"低于(如果是MYFOLDER)行的任何其他组合."FOR"行中有什么可疑的吗?
尽管不了解目标,但我看到了一些问题.
您可以使用SET(例如SET MyFolder=)定义变量.在Unix shell中,你只是说MyFOLDER=,但不是在CMD中.
该IFMyFolder中的比较(这应该做到==不=)可能是毫无意义的,因为你不是在将使用变量的内容的方式这样做.您只是将文字字符串MYFOLDER与文字字符串进行比较[].此比较将始终为false,并且在整个脚本执行过程中永远不会更改.
您正在转让中括号(这是所有评估一次的全部内容,包括正常的变量替换),然后尝试访问相同的"块"的内部变量(CMD确实没有明确的语法,但它至少类似于一个块).将要发生的是,%z%将在评估时(...)评估它,并且在此脚本中,它将为空并且替换为空.随后IF EXIST将吃下你给它的下一个东西,这是括号表达式.我无法预测那里会发生什么.
我不知道为什么你分配%%B到z,然后用z一个比较.为什么不用%%B?%%B至少会使用延迟扩张.
您已启用延迟扩展,但尚未使用它(除了FOR您打开延迟扩展时始终延迟的变量除外).要使用延迟扩展,您必须使用bangs(!)而不是正常的percent(%)来包围变量.因此,在z或者MYFOLDER,它将分别成为!z!和!MYFOLDER!.如果为同一块中的变量赋值,则以这种方式访问变量在括号"块"内是绝对必要的.
我会提供你的剧本的修订版,但是我太沉闷了,无法理解你想要完成的任务.
| 归档时间: |
|
| 查看次数: |
4439 次 |
| 最近记录: |