下面是我寫的怎麼做你正在嘗試做一個函數:
:GetLoggedInUser comp user
for /f %%u in (
'wmic /NODE:"%1" Computersystem get username^|find "\"') do (
if not errorlevel 1 (for /f "tokens=2 delims=\" %%a in (
'wmic /NODE:"%1" Computersystem get username^|find "\"') do (
For /f %%b in ("%%a") do (set %2=%%b))
) ELSE (for /f "skip=1" %%a in (
'wmic /NODE:"%1" Computersystem get username') do (
For /f %%b in ("%%a") do (set %2=%%b))
))
Exit /b
這是我的ping功能。如果ping成功,則返回0,否則返回1。
:IsPingable comp
ping -n 1 -w 3000 -4 -l 8 "%~1" | Find "TTL=">nul
exit /b
Usage example:
for /l %%a in (1,1,255) do (
call:IsPingable 10.6.1.%%a && (
echo ping 10.6.1.%%a used)||(echo ping 10.6.1.%%a unused)
)
這裏是如果你執行ping IP的,想要返回的主機名,以及:
:IsPingable2 comp ret
setlocal
for /f "tokens=2" %%a in (
'"ping -a -n 1 -4 "%~1" | Find "Pinging" 2>nul"') do set name=%%a
endlocal & set %~2=%name%
ping -n 1 -w 3000 -4 -l 8 "%~1" | Find "TTL=">nul
exit /b
Usage example:
@echo off
setlocal enabledelayedexpansion
for /l %%a in (1,1,255) do (
call:IsPingable2 10.6.1.%%a host && (
echo ping !host! - 10.6.1.%%a used)||(echo ping !host! - 10.6.1.%%a unused)
)
我剛剛發佈這些,因爲他們也許會派上用場對於這種類型的事情未來。你現在可以使用:IsPingable。
你會在你的代碼中使用這樣的:
IF EXIST C:\test\final.csv (del C:\test\final.csv)
set ComputerList=C:\test\ClientList.txt
Echo Computer Name,IP Address,Logged In User>Final.csv
setlocal enabledelayedexpansion
echo please wait...
echo.
for /f "usebackq tokens=*" %%A in ("%ComputerList%") do (
for /f "tokens=3" %%B in ('ping -n 1 -l 1 %%A ^|find "TTL="') do (
if not errorlevel 1 (
set IPadd=%%B
call :GetLoggedInUser %%B uname
echo %%A,!IPadd:~0,-1!,!uname!>>final.csv
)
)
)
echo identified machines for Install
start excel C:\test\final.csv
echo opened csv file
goto :eof
:GetLoggedInUser comp user
for /f %%u in (
'wmic /NODE:"%1" Computersystem get username^|find "\"') do (
if not errorlevel 1 (for /f "tokens=2 delims=\" %%a in (
'wmic /NODE:"%1" Computersystem get username^|find "\"') do (
For /f %%b in ("%%a") do (set %2=%%b))
) ELSE (for /f "skip=1" %%a in (
'wmic /NODE:"%1" Computersystem get username') do (
For /f %%b in ("%%a") do (set %2=%%b))
))
Exit /b
我還需要將輸出添加到現有的csv文件...我想遍歷csv文件的每一行並找到用戶,然後輸出所有3如果我不能將用戶名添加到當前csv文件 –
首先,您不需要2個csv文件。只需檢查ping的錯誤級別,如果成功就只寫入文件。你也可以把這部分分解成一個函數。我在上面添加了它。然後,在你的循環中添加一個對我的函數的調用,並使用它返回的變量!var!擴展語法來獲取用戶名。 –
也許我很愚蠢(哪一天我有可能!)我怎麼輸出這些值到一個CSV文件?您提供的代碼只是運行得非常快,然後關閉 –