远程检查文件大小并获取报告

时间:2011-06-20 19:56:31

标签: batch-file

此脚本尝试:

  • 从txt文件中获取输入,该文件是计算机名称列表,

  • 检查列表中计算机上的日志文件是否大于1000字节,

  • 创建一个txt报告,其中包含日志文件超过1000字节的计算机的名称,

  • 使用文件小于1000字节的计算机名称创建另一个txt报告。

然而,出了点问题。任何帮助都可能很好。

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

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

FOR /F "usebackq" %%A IN ('%file%') DO set size=%%~zA

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

大家好, 感谢您的宝贵支持。我祝贺那些构思和建立这个网站的人真的做得很好而且很有用。 我对你建议合并其他功能的脚本做了一些修改,但有些东西不能正常工作......因为你可以查看我使用editv32来隐藏我的批处理密码,原理是一样但是正如您在检查日志大小后可以看到的那样,使用“maxlongsize.txt”来获取下一个活动的PC的名称。我希望活动在文件“logsizemax.txt”中的所有PC上按顺序执行,开头只有一个身份验证。我注意到,由于某种原因,有时文件“logsizemin.txt”没有创建,但我不明白为什么。最大的问题是放入另一个文件,例如“计算机无法访问”那些未在网络上访问的PC,但我完全不知道如何实现它。我希望我已经充分解释了。抱歉英文不好!我想你理解我的意图:)。批次之后

@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

2 个答案:

答案 0 :(得分:1)

更改:GTG-> GEQ,不要使用引号括起变量两次,从echo中移除前导空格,稍微清理一下。

@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。

答案 1 :(得分: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