有一种简单的方法可以检查多个嵌套命令是否具有正确数量的括号。只需将每个嵌套命令向右缩进三个空格,将左括号放在同一行,右括号放在它关闭的命令的同一列中。例如
for %%a in (set) do (
for %%b in (set) do (
if %%a equ %%b (
then part
) else (
else part
)
)
)
当我将这种格式应用于您的代码时,我得到了这个:
for /f "tokens=1" %%G in (termlist.txt) do (
for /f "Tokens=*" %%a in ('dsquery user -samid %%G^|dsget user -disabled^| Find /v "disabled"^| Find /v "dsget succeeded"') do set disable=%%a
)
echo "%%G %disable%" >> termvalid.txt)
这样,现在很明显还有一个额外的右括号(被忽略),但是 %%G 放在它的 FOR之外。有两种方法可以解决此问题;消除正确的 parenteses 并将 ECHO 移动到正确的位置:
for /f "tokens=1" %%G in (termlist.txt) do (
for /f "Tokens=*" %%a in ('dsquery user -samid %%G^|dsget user -disabled^| Find /v "disabled"^| Find /v "dsget succeeded"') do set disable=%%a
echo "%%G !disable!" >> termvalid.txt
)
...或插入遗漏的左括号:
for /f "tokens=1" %%G in (termlist.txt) do (
for /f "Tokens=*" %%a in ('dsquery user -samid %%G^|dsget user -disabled^| Find /v "disabled"^| Find /v "dsget succeeded"') do (
set disable=%%a
)
echo "%%G !disable!" >> termvalid.txt
)
...除了 %disable% 必须通过延迟访问的问题!变量!扩展,因为它在 FOR 命令中。