关于我之前收到的问题和答复(可以在这里find),我正在寻求关于批处理脚本的帮助。 根据收到的上述问题的答复,我创build了一个批处理脚本,如下所示:
@echo off setlocal enabledelayedexpansion ping -n 1 %1 | find "TTL=" > NUL IF NOT ERRORLEVEL 1 ( FOR /F %%i IN ('wmic /node:%1 computersystem get Name') DO (SET A=%%i) FOR /F %%i IN ('wmic /node:%1 computersystem get Domain') DO (SET B=%%i) FOR /F %%i IN ('wmic /node:%1 computersystem get UserName') DO (SET C=%%i) FOR /F %%i IN ('wmic /node:%1 computersystem get Manufacturer') DO (SET D=%%i) FOR /F "delims=" %%i IN ('wmic /node:%1 computersystem get Model') DO (SET E=%%i) FOR %%a in (%E%) DO (SET E=%%a) FOR /F %%i IN ('wmic /node:%1 computersystem get SystemType') DO (SET F=%%i) FOR /F %%i IN ('wmic /node:%1 bios get SerialNumber') DO (SET G=%%i) FOR /F "delims=|" %%i IN ('wmic /node:%1 os get Name') DO (SET H=%%i) FOR %%a in (%H%) DO (SET H=%%a) FOR /F %%i IN ('wmic /node:%1 os get TotalVisibleMemorySize') DO (SET J=%%i) FOR /F "delims=" %%i IN ('wmic /node:%1 cpu get Name') DO (SET K=%%i) FOR %%a in (%K%) DO (SET K=%%a) echo !A!,!B!,!C!,!D!,!E!,!F!,!G!,!H!,!J!,!K! >> output.csv )
问题是,当上面的脚本使用有效的参数执行时,它既不显示任何错误消息,也不会在生成的CSV文件中显示任何数据。 我无法理解脚本有什么问题。
1 – 从每次打电话到wmic,尽可能多地获取信息
2 – 过滤wmic的输出。 在这种情况下,我使用find
来搜索包含指定节点的行。
3 – 如果可能的话,为了避免在行尾删除附加的CR,检索一个你不会阅读的附加字段。
4 – wmic的输出以字母顺序排列的节点名称和字段作为前缀。 为此定义tokens
。
@echo off setlocal enableextensions disabledelayedexpansion set "node=%~1" ping -n 1 %node% | find "TTL=" > NUL if errorlevel 1 goto endProcess for /f "tokens=2-7 delims=," %%a in ( 'wmic /node:"%node%" computersystem get domain^,manufacturer^,model^,name^,systemtype^,username^,wakeuptype /format:csv ^| find /i "%node%"' ) do ( set "_domain=%%a" set "_manufacturer=%%b" set "_model=%%c" set "_name=%%d" set "_systemType=%%e" set "_userName=%%f" ) for /f "tokens=2 delims=," %%a in ( 'wmic /node:"%node%" bios get serialNumber^,version /format:csv ^| find /i "%node%"' ) do ( set "_serialNumber=%%a" ) for /f "tokens=2-3 delims=," %%a in ( 'wmic /node:"%node%" os get description^,totalvisiblememorysize^,version /format:csv ^| find /i "%node%"' ) do ( set "_osName=%%a" set "_memory=%%b" ) for /f "tokens=2 delims=," %%a in ( 'wmic /node:"%node%" cpu get name^,version /format:csv ^| find /i "%node%"' ) do ( set "_cpu=%%a" ) echo %_name%,%_domain%,%_userName%,%_manufacturer%,%_model%,%_systemType%,%_serialNumber%,%_osName%,%_memory%,%_cpu% :endProcess endlocal
这是一个调试版本。 你可以看到变量结束了nul。
@echo off setlocal enabledelayedexpansion ping -n 1 %1 | find "TTL=" > NUL IF NOT ERRORLEVEL 1 ( echo running loop FOR /F %%i IN ('wmic /node:%1 computersystem get Name') DO echo (set A=%%i) FOR /F %%i IN ('wmic /node:%1 computersystem get Domain') DO echo (set B=%%i) FOR /F %%i IN ('wmic /node:%1 computersystem get UserName') DO echo (set C=%%i) FOR /F %%i IN ('wmic /node:%1 computersystem get Manufacturer') DO echo (set D=%%i) FOR /F "delims=" %%i IN ('wmic /node:%1 computersystem get Model') DO echo (set E=%%i) FOR %%a in (!E!) DO echo (set E=%%a) FOR /F %%i IN ('wmic /node:%1 computersystem get SystemType') DO echo (set F=%%i) FOR /F %%i IN ('wmic /node:%1 bios get SerialNumber') DO echo (set G=%%i) FOR /F "delims=|" %%i IN ('wmic /node:%1 os get Name') DO echo (set H=%%i) FOR %%a in (!H!) DO echo (set H=%%a) FOR /F %%i IN ('wmic /node:%1 os get TotalVisibleMemorySize') DO echo (set J=%%i) FOR /F "delims=" %%i IN ('wmic /node:%1 cpu get Name') DO echo (set K=%%i) FOR %%a in (!K!) DO echo (set K=%%a) echo !A!,!B!,!C!,!D!,!E!,!F!,!G!,!H!,!J!,!K! >> output.csv ) pause
重建您的FOR
行到以下语法:
FOR /F "tokens=2 delims==" %%i IN ('wmic /node:%1 computersystem get Name /value') DO echo (set A=%%i)
(当输出满足你的时候显然会消除echo
)
@echo off setlocal enableextensions enabledelayedexpansion for %%y in (73,74) do ( for /L %%z in (1,1,254) do ( set "node=172.22.%%y.%%z" ping -n 1 %node% | find "TTL=" > NUL if not errorlevel 1 ( for /f "tokens=2-7 delims=," %%a in ( 'wmic /node:"%node%" computersystem get domain^,manufacturer^,model^,name^,systemtype^,username^,wakeuptype /format:csv ^| find /i "%node%"' ) do ( set "_domain=%%a" set "_manufacturer=%%b" set "_model=%%c" set "_name=%%d" set "_systemType=%%e" set "_userName=%%f" ) for /f "tokens=2 delims=," %%a in ( 'wmic /node:"%node%" bios get serialNumber^,version /format:csv ^| find /i "%node%"' ) do ( set "_serialNumber=%%a" ) for /f "tokens=2-3 delims=," %%a in ( 'wmic /node:"%node%" os get description^,totalvisiblememorysize^,version /format:csv ^| find /i "%node%"' ) do ( set "_osName=%%a" set "_memory=%%b" ) for /f "tokens=2 delims=," %%a in ( 'wmic /node:"%node%" cpu get name^,version /format:csv ^| find /i "%node%"' ) do ( set "_cpu=%%a" ) echo !_name!,!_domain!,!_userName!,!_manufacturer!,!_model!,!_systemType!,!_serialNumber!,!_osName!,!_memory!,!_cpu! >> output.csv )))