我未能成功完成以下工作。一切正常,直到我试图在'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
答案 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