for取空值的方法,字段为空时赋值空值并不是将其过滤

迅恒数据中心
在批处理脚本中,当使用 for /f 循环和 delims 选项来分割字符串时,如果分割后的某个字段为空,那么对应的变量(如 %%a, %%b, 等)将不会被赋值,而是保持其之前的值或者为空(如果之前没有赋值过)。这就解释了为什么在你的情况下,当 seo.txt 文件的内容为 ||baidu.com|so.com| 时,%%a 和 %%b 没有被赋值为空字符串。
要正确处理这种情况,你需要确保即使字段为空,也能正确地将其赋值给对应的变量。这可以通过在循环体内显式地检查每个变量是否被赋值来实现,如果没有被赋值,则手动将其设置为空字符串。
以下是一个修改后的脚本示例,它可以正确地处理你的 seo.txt 文件内容:
@echo off
for %%b in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%b:\ipset.txt" (set "OK5=OK5" & set "IPTXTpanfu=%%b:")
if "%OK5%"=="" goto tuichu

for /f "delims=" %%a in (%IPTXTpanfu%\ipset.txt) do call :read_iptxt "%%a"
echo newip2=[%newip2%], netmask2=[%netmask2%], gateway2=[%gateway2%], dns3=[%dns3%], dns4=[%dns4%], mima=[%mima%], rdpport=[%rdpport%]
pause &&  goto :EOF

:read_iptxt
set "ipset=|%~1"
set "ipset=%ipset:|=|%"
set "ipset=%ipset:||=|-|%"
set "ipset=%ipset:||=|-|%"
for /f "tokens=1-7 delims=|" %%a in ("%ipset%") do (
    set "newip2=%%a"
    set "netmask2=%%b"
    set "gateway2=%%c"
    set "dns3=%%d"
    set "dns4=%%e"
    set "mima=%%f"
    set "rdpport=%%g"
)
goto :EOF

:tuichu
pause

 

分类:IDC资讯 百度收录 必应收录