Windows ';如果错误级别';处于'时的语句;对于findstr';环
我未能成功地使以下各项发挥作用。在我尝试在“for”循环中获得“findstr”的结果之前,一切都正常。也许有更好的方法:在masters.csv文件中查找%subnet%。如果找到,将MSS变量设置为“for”的结果值。如果找不到值,它将指定一个静态值(孤立值)。提前感谢您的帮助Windows ';如果错误级别';处于'时的语句;对于findstr';环,windows,batch-file,Windows,Batch File,我未能成功地使以下各项发挥作用。在我尝试在“for”循环中获得“findstr”的结果之前,一切都正常。也许有更好的方法:在masters.csv文件中查找%subnet%。如果找到,将MSS变量设置为“for”的结果值。如果找不到值,它将指定一个静态值(孤立值)。提前感谢您的帮助 for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IPv4"') do set ip=%%b set ip=%ip:~1% e
for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IPv4"') do set ip=%%b
set ip=%ip:~1%
echo %ip% > ipaddress.txt
pause
for /F "tokens=1-3 delims=." %%a in ("%ip%") do set FirstThreeOctets=%%a.%%b.%%c
@REM echo First three: %FirstThreeOctets%
@echo off
setlocal
set subnet=%FirstThreeOctets%
echo %subnet%
for /f "tokens=2 delims=," %%A in ('findstr /r "^%subnet%," "\\server\APPS\appname\updates\masters.csv"') do goto OrphanCheck
@REM if errorlevel ==1 goto Orphan do set MSS=%%A
@REM echo %MSS%
@REM goto 64installcheck
:OrphanCheck
if errorlevel==1 goto Orphan
Goto NoOrphan
:NoOrphan
set MSS=%%A
Goto 64installcheck
:Orphan
set MSS=ORPHAN
echo %MSS%
pause
当你跑的时候
for /f "tokens=2 delims=," %%A in (
'findstr /r "^%subnet%," "\\server\APPS\appname\updates\masters.csv"'
) do goto OrphanCheck
可能发生两件事
如果findstr
没有找到字符串,则不会执行for循环中的代码,并到达下一行,但此行无法访问findstr
生成的errorlevel,它会看到for
命令的errorlevel(?)
如果findstr找到字符串,则执行goto,但会发生相同的情况
当达到检查错误级别的行时,会出现另一个问题
if errorlevel==1
是一个有效的构造,但它不做它要做的事情。它正在测试字符串errorlevel
是否等于字符串1
。正确的sintax应该是
if errorlevel 1 ....
或
但如图所示,当达到该行时,errorlevel将不会反映findstr命令的错误
三行之后就是下一个错误
set MSS=%%A
一旦的命令结束,其可替换参数就没有任何值
获取代码的简化版本
for /f "tokens=3-6 delims=.: " %%a in ('ipconfig ^| find "IPv4"') do (
set "ip=%%a.%%b.%%c.%%d"
set "subnet=%%a.%%b.%%c"
)
>"ipaddress.txt" echo %ip%
for /f "tokens=2 delims=," %%a in (
'findstr /b /c:"%subnet%," "\\server\APPS\appname\updates\masters.csv"'
) do (
set "MSS=%%a"
goto 64installcheck
)
set "MSS=ORPHAN"
echo %MSS%
pause
你看到错误了吗?没有错误。不管错误级别如何,它只会转到其中一个。如果errorlevel==1,则肯定不是您想要的。这是有效的语法,但比较字符串“errorlevel”和字符串“1”。如果%errorlevel%==1
(如果要精确检查返回值1
),则需要;如果errorlevel 1
(如果要检查任何大于0
)的返回值,则需要。%errorlevel%现在已理解。。。但是,它仍然没有根据%errorlevel%选择一个或另一个“转到”。我想知道errorlevel是否实际上指的是findstr的结果,因为它是在“do goto”的结果之后出现的?哇!它是有效的,而且更加巩固。非常感谢。
for /f "tokens=3-6 delims=.: " %%a in ('ipconfig ^| find "IPv4"') do (
set "ip=%%a.%%b.%%c.%%d"
set "subnet=%%a.%%b.%%c"
)
>"ipaddress.txt" echo %ip%
for /f "tokens=2 delims=," %%a in (
'findstr /b /c:"%subnet%," "\\server\APPS\appname\updates\masters.csv"'
) do (
set "MSS=%%a"
goto 64installcheck
)
set "MSS=ORPHAN"
echo %MSS%
pause