在下面的脚本中,很少有东西不能正常工作,我很难弄清楚为什么,首先它给变量一个'Null‘值( .txt文件不是空的),其次它返回给我一些函数在那个时候是不期望的(比如’‘goto’不是期望的),所以它可能是语法上的问题?
@echo off
set name1=sample1
set name2=sample2
set name3=sample3
set ccount=0
del mes.txt
:WFC
ping localhost -n 2 >nul
if exist mes.txt (
SetLocal EnableDelayedExpansion
set /p cname=<mes.txt
set /a ccount=%ccount%+1
if %cname%==!name%ccount%! goto AllowedList
if %ccount%==20 goto Crasher
goto WFC我尝试在脚本的末尾调用echo %cname%,结果var的值为"nil“,另外我还打开了@echo,但是没有发现任何有用的东西来理解这个问题。最奇怪的部分是,如果我将变量声明从'if exist statemant‘中去掉,整个脚本就会像下面这样神奇地工作:
@echo off
set name1=sample1
set name2=sample2
set name3=sample3
set ccount=0
del mes.txt
:WFC
ping localhost -n 2 >nul
set /p cname=<mes.txt
if exist mes.txt (
SetLocal EnableDelayedExpansion
set /a ccount=%ccount%+1
if %cname%==!name%ccount%! goto AllowedList
if %ccount%==20 goto Crasher
goto WFC所以,这可能足够令人满意,但它不是,有第二个软件一直在更新mes.txt值,我假设在第二个脚本中会有一些(不多,但有些)情况,其中var cname值将得到null值,但它仍然会将null值与name1进行比较,完成允许列表的排除sample1。有没有人能解决这个问题,或者至少解释一下为什么?
发布于 2016-10-09 01:15:35
感谢用户MC ND,他在评论中提醒我,我已经设法解决了这个问题,事实证明这是一件非常简单的事情,他的答案是:
您的问题是在24分钟前读取%cname%和%ccount% (read here)时出现延迟扩展(缺少扩展)- MC ND
我对脚本所做的工作是:
@echo off
set name1=sample1
set name2=sample2
set name3=sample3
set ccount=0
del mes.txt
:WFC
ping localhost -n 2 >nul
set /p cname=<mes.txt
if exist mes.txt (
SetLocal EnableDelayedExpansion
set /a ccount=%ccount%+1
if !cname!==!name%ccount%! goto AllowedList
if !ccount!==20 goto Crasher
goto WFC发布于 2016-10-09 02:51:46
我的猜测是它应该更像这样
:WFC
Timeout 1 1>Nul
If Not Exist mes.txt GoTo :WFC
SetLocal EnableDelayedExpansion
Set/P cname=<mes.txt
Set/A ccount+=1
If %ccount% Equ 20 GoTo :Crasher
If "!name%ccount%!" Equ "%cname%" GoTo :AllowedList
GoTo :WFChttps://stackoverflow.com/questions/39934538
复制相似问题