2013-10-18 137 views
1

我目前有一個批處理文件,它讀取計算機名稱列表並將其中的每一個列出並輸出回答csv文件的計算機名稱和ip地址。批處理文件幫助 - 將命令的輸出添加到csv文件

我現在需要編輯它來找出機器的用戶。我需要聯繫在線用戶安排他們的計算機完成一些工作。他們可以超過批處理文件中的一百臺機器,以便手動找出每個用戶需要時間。有沒有辦法做到這一點?

`IF EXIST C:\test\new.csv (del C:\test\new.csv) 
IF EXIST C:\test\final.csv (del C:\test\final.csv) 
set ComputerList=C:\test\ClientList.txt 
Echo Computer Name,IP Address>Final.csv 
setlocal enabledelayedexpansion 
echo please wait... 
for /f "usebackq tokens=*" %%A in ("%ComputerList%") do (
for /f "tokens=3" %%B in ('ping -n 1 -l 1 %%A ^|findstr Reply') do (
set IPadd=%%B 
echo %%A,!IPadd:~0,-1!>>final.csv 
) 
) 
findstr /V "IPAddress" final.csv >> C:\test\new.csv 
echo identified machines for Install 
start excel C:\test\new.csv 
echo opened csv file` 

我要用來獲取用戶名的命令是:

`wmic.exe /NODE: %%A COMPUTERSYSTEM GET USERNAME` 

感謝 馬克

回答

1

下面是我寫的怎麼做你正在嘗試做一個函數:

: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 
+0

我還需要將輸出添加到現有的csv文件...我想遍歷csv文件的每一行並找到用戶,然後輸出所有3如果我不能將用戶名添加到當前csv文件 –

+0

首先,您不需要2個csv文件。只需檢查ping的錯誤級別,如果成功就只寫入文件。你也可以把這部分分解成一個函數。我在上面添加了它。然後,在你的循環中添加一個對我的函數的調用,並使用它返回的變量!var!擴展語法來獲取用戶名。 –

+0

也許我很愚蠢(哪一天我有可能!)我怎麼輸出這些值到一個CSV文件?您提供的代碼只是運行得非常快,然後關閉 –

0

下面的代碼將計算行數在連續兩個文件,並設置成變量SalaryCountTaxCount

@ECHO OFF  
echo Process started, please wait...  
for /f %%C in ('Find /V /C "" ^< "D:\Trial\Salary.txt"') do set SalaryCount=%%C  
echo Salary,%SalaryCount% 
for /f %%C in ('Find /V /C "" ^< "D:\Trial\Tax.txt"') do set TaxCount=%%C 
echo Tax,%TaxCount% 

現在,如果您需要將這些值輸出到csv文件,您可以使用下面的代碼。

@ECHO OFF 
cd "D:\CSVOutputPath\" 
echo Process started, please wait... 
echo FILENAME,FILECOUNT> SUMMARY.csv 
for /f %%C in ('Find /V /C "" ^< "D:\Trial\Salary.txt"') do set Count=%%C 
echo Salary,%Count%>> SUMMARY.csv 
for /f %%C in ('Find /V /C "" ^< "D:\Trial\Tax.txt"') do set Count=%%C 
echo Tax,%Count%>> SUMMARY.csv 

>將覆蓋現有文件的內容和>>將追加新的數據到現有的數據。 CSV將在生成D:\ CSVOutputPath

+0

你的答案與問題沒有什麼共同之處。它看起來像你添加了一個錯誤問題的答案。請檢查。 – Stephan

相關問題