2011-06-20 29 views
1

該腳本嘗試:遠程檢查文件的大小,並得到報告

  • 得到一個txt文件,該文件是計算機名稱列表的輸入,

  • 檢查,如果在一個日誌文件從列表中的計算機超過1000個字節大,

  • 創建帶有日誌文件超過1000個字節的計算機的名稱的TXT報告,

  • 用文件小於1000字節的計算機的名稱創建另一個txt報告。

但是,出了點問題。任何幫助可能會很好。

大家好, 感謝您的寶貴支持。我祝賀那些構思和建造這個網站的人真的做得很好,很有用。 我對腳本進行了一些修改,並建議將其他功能結合使用,但某些功能無法正常工作,因爲我可能會使用editv32來隱藏密碼,原理相同但正如您在查看日誌大小後可以看到的那樣,「maxlongsize.txt」用於獲取下一個活動所在PC的名稱。我希望這些活動是在文件「logsizemax.txt」中的所有PC上依次執行的,開頭只有一個認證。我注意到,出於某種原因有時文件「logsizemin.txt」不會創建,但我不明白爲什麼。最大的可能是放入另一個文件,如「電腦無法訪問」那些沒有在網絡上達到的電腦,但我完全不知道如何實現它。我希望我已經充分解釋。對不起,英文不好!我想你明白我的意圖:)。繼一批

@setlocal 
@echo off 
editv32 -p "Enter username:" USR  
editv32 -m -p "Enter password:" PWD 
for /f "tokens=1" %%I in (computernames.txt) do call :checksz %%I 
endlocal 
goto :eof 

:checksz 
setlocal 
set file="\\%1\c$\data\data.log" 
set min=1000 
type NUL>logsizemax.txt 
type NUL>logsizemin.txt 
if not exist %file% goto :eof 
FOR /F "usebackq delims=" %%A IN ('%file%') DO set size=%%~zA 

if %size% GEQ %min% (echo %1>>logsizemax.txt) ELSE (echo %1>>logsizemin.txt) 
endlocal 

@setlocal 
for /f "tokens=1" %%I in (logsizemax.txt) do call :sw %%I 
endlocal 
goto :eof 

:sw 
echo. 
echo ***************************************** 
echo *   VBS & Deploy script  * 
echo ***************************************** 

echo. 
echo Run VBS and deploy script ..... 

psexec \\%1 -u %USR% -p %PWD% cscript "\\rep\Reg.vbs" 
psexec \\%1 -u %USR% -p %PWD% cmd /c "\\rep\deploy.cmd" 

echo. 
echo ************************** 
echo *  EXE Run   * 
echo ************************** 

echo. 
echo Running exe ..... 

psexec -u %USR% -p %PWD% \\%1 "c:\Program Files\test.exe" 

echo. 
echo *********************************** 
echo * Exe application launched  * 
echo *********************************** 
echo. 
goto END 

:END 
exit 
+0

您上次**編輯**是一個新問題,最好打開一個新問題,否則沒有人可以按照您的問題/回答歷史記錄 – jeb

回答

1

的變化:GTG-> GEQ,不要用引號括變量兩次,去除從回聲領先的空間,一點點清理。

@setlocal 
@echo off 
for /f "tokens=1" %%I in (computernames.txt) do call :checksz %%I 
endlocal 
goto :eof 

:checksz 
setlocal 
set file=\\%1\c$\data\info.log 
set min=1000 

if not exist %file% endlocal && goto :eof 
FOR /F "usebackq delims=" %%A IN ('%file%') DO set size=%%~zA 

if %size% GEQ %min% (echo %1>>logsizemin.txt) ELSE (echo %1>>logsizemax.txt) 
endlocal 
goto :eof 

編輯:根據PA和Andriy M的評論更新 - endlocal如果文件不存在,並刪除\ update note。

+0

這實際上是雙斜線,因爲片段不是顯而易見的格式化爲代碼。 –

+0

資源泄漏警告,如果文件不存在,'checksz'會返回而不調用'endlocal'。 –

+0

Doh!感謝您抓住這些。 –

1

您可以避免使用環境變量並全部使用第二個FOR。試試這個更簡單的蝙蝠版本,使用更通用的:checksz例程。

@echo off 
for /f "tokens=*" %%a in (computernames.txt) do (
    call :checksz "\\%%a\c$\data\info.log" 1000 "%%a" 
) 
goto :eof 

:checksz 
if %~z1 GTR %2 (
echo %~3 >> logsizemin.txt 
) ELSE (
echo %~3 >> logsizemax.txt 
) 
goto :eof 

參見HELP CALL瞭解更多信息。

+0

重要的方法。我試圖理解但尚未充分準備。我在學習 – lordoftheclip