' if errorlevel'在“发现”的声明中环

时间:2014-05-20 17:12:27

标签: 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%
        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

1 个答案:

答案 0 :(得分:2)

运行时

for /f "tokens=2 delims=," %%A in (
    'findstr /r "^%subnet%," "\\server\APPS\appname\updates\masters.csv"'
) do goto OrphanCheck

可能会发生两件事。

如果findstr找不到字符串,则不执行for循环中的代码并到达下一行,但此行无法访问findstr生成的错误级别,它看到for命令的错误级别(?)。

如果findstr找到字符串,则执行goto但会发生相同的情况。

当达到检查错误级别的行时,会出现另一个问题

if errorlevel==1

是一个有效的构造,但它不能完成它的接缝。它正在测试字符串errorlevel是否等于字符串1。正确的sintax应该是

if errorlevel 1 ....

if %errorlevel%==1

但如上所述,当到达该行时,errorlevel将不会反映findstr命令的错误。

三行之后出现下一个错误。

set MSS=%%A

for命令结束后,其可替换参数没有任何值。

有关代码的简化版本

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