首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘in errorlevel’语句in 'for findstr‘循环

‘in errorlevel’语句in 'for findstr‘循环
EN

Stack Overflow用户
提问于 2014-05-20 17:12:26
回答 1查看 653关注 0票数 1

我一直没有成功地让下面的人开始工作。在我试图获得'for‘循环中的'findstr’的结果之前,一切都是正常的。也许有一种更好的方法可以做到这一点:在masters.csv文件中查找%subnet%。如果找到它,将MSS变量设置为“for”的结果值。如果它找不到一个值,它将指定一个静态值(孤立值)。提前感谢您的帮助!!

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-20 19:08:54

当你跑的时候

代码语言:javascript
复制
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,但也会发生相同的情况。

当到达检查错误级别的行时,将引发另一个问题。

代码语言:javascript
复制
if errorlevel==1

是一个有效的构造,但它不做它所接缝的事情。它正在测试字符串errorlevel是否等于字符串1。正确的罪过应该是

代码语言:javascript
复制
if errorlevel 1 ....

代码语言:javascript
复制
if %errorlevel%==1

但是如前所述,当行到达时,错误级别将不会反映findstr命令的错误。

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

代码语言:javascript
复制
set MSS=%%A

一旦for命令结束,它的可替换参数就没有任何值。

对于简化的代码版本

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23766049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档