Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows ';如果错误级别';处于'时的语句;对于findstr';环_Windows_Batch File - Fatal编程技术网

Windows ';如果错误级别';处于'时的语句;对于findstr';环

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”循环中获得“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
当你跑的时候

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