2014-05-20 47 views
1

我一直沒有成功執行以下操作。一切工作,直到我試圖在'for'循環中獲得'findstr'的結果。也許有更好的方法:在masters.csv文件中查找%subnet%。如果發現它,請將MSS變量設置爲「for」中的結果值。如果它沒有找到一個值,它將分配一個靜態值(孤立)。提前感謝任何幫助!如果在'for findstr'循環中出現'errorlevel'語句

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 
+0

你看到的任何錯誤的簡化版本? –

+0

沒有錯誤。無論錯誤級別如何,它都只是一個或另一個。 – WettDawg

+0

'如果errorlevel == 1'絕對不是你想要的。它是有效的語法,但將字符串「errorlevel」與字符串「1」進行比較。你希望'if%errorlevel%== 1'(如果你想檢查返回值'1')或'如果錯誤級別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 

但表示,在達到線的時候,錯誤級別將不會反映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 
+0

哇!它有效,而且更加鞏固得多。謝謝! – WettDawg