[英]Batch Script shows no output
參考我之前收到的問題和回復(可在此處找到),我正在尋求有關批處理腳本的幫助。 根據收到的上述問題的答復,我創建了一個Batch腳本,如下所示:
@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
這是一個調試版本。 你可以看到變量最終結束了。
@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
)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.