我一直没有成功地让下面的人开始工作。在我试图获得'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发布于 2014-05-20 19:08:54
当你跑的时候
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。正确的罪过应该是
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%
pausehttps://stackoverflow.com/questions/23766049
复制相似问题