BAT 批处理 嵌套循环中 IF判断有问题?

想做一个批处理,用来判断URL的可用性。代码如下:
@echo off & setlocal EnableDelayedExpansion
type nul > curl.txtfor /f "delims=" %%i in (URL.txt) do (
set link=%%i
for /f %%j in ('curl -o /dev/null -s -w %%{http_code} %%i') do ( set state=%%j )
echo !state!
if !state!==200 (echo !link! OK) else (echo !link! NG)
)
type curl.txt
pause>nul

明明!state!是200,但是却始终执行else的动作?想请问大神是哪里写错了吗?

( set state=%%j )
这里的j和)之间有个空格,导致!state!获得的值其实是“200 ”(不包含双引号,0后面多了空格)
if !state!==200比较时就变成了if 200 ==200所以不匹配
您把( set state=%%j )改成(set state=%%j)或( set "state=%%j" )即可解决问题。
在批处理中有些时候,对空格很敏感哦!所以一定要注意书写格式。追问

服了。原来我是没有括号的,之前是没有开启延迟变量导致不行。开启后,重写时,加了括号。。。

追答

开不开变量延迟跟有没有括号,是没关系的。其实do后面只执行一条命令时,没必要加括号。

我写代码时,如果加括号,无论是一条还是多条命令,都会直接换行。

温馨提示:答案为网友推荐,仅供参考
相似回答