使用bat文件创建日志

时间:2013-08-08 20:32:43

标签: dll batch-file

我正在尝试使用脚本通过检查.dll文件版本远程监控我们服务器上的软件安装。我不确定是否可以这样做但是在所有服务器上安装之后我想运行一个bat文件来查看所有服务器并创建一个包含服务器名称和.dll文件版本号的日志文件。建议会很棒。感谢。

1 个答案:

答案 0 :(得分:1)

首先从这里下载STRINGS.EXE(处理unicode)。 http://technet.microsoft.com/en-us/sysinternals/bb897439.aspx

这是我已经使用了很长一段时间的一些东西。它比你要求的要多一些,但也许其他人更愿意拥有这一切。您可以轻松删除不需要的部分。根据需要添加/删除文件类型,并删除不需要的输出部分。它并没有完全按照你的要求完成,但是很难完成,你可以根据自己的需要进行调整。将代码保存为FileVersions.bat(或其他)。将此bat文件和下载的STRINGS.EXE放在同一文件夹中。执行此bat文件以获取FileVersions.txt(或任何您命名的bat文件)的输出。它看起来像这样。获取当前文件夹下的文件夹中所有指定文件类型的版本。根据需要进行修改,然后根据需要处理多台机器。

======输出============ * .dll * .ocx * .exe文件的版本 - Thu 08/08/2013 21:13:28.17

File=C:\Drivers\storage\strings.exe
FileDesc=strings
FileVer=2.41
ProductName=Sysinternals Strings
ProductVer=2.41

File=C:\Drivers\storage\R159108\TEACico2.dll
FileDesc=TEACico2.DLL
FileVer=1, 1, 0, 0
ProductName= TEACico2 DLL
ProductVer=1, 1, 0, 0

======输出结束============

@ECHO OFF
TITLE %~n0
PUSHD %~dp0
SET FileTypes=*.dll *.ocx *.exe
SET OutFile=%~n0.txt
IF EXIST %OutFile% DEL /q %OutFile%
ECHO.Retrieving file versions for %FileTypes% files
ECHO.
ECHO.Versions for %FileTypes% files - %Date% %Time% > %OutFile%
ECHO.
FOR /R "%CD%" %%A IN (%FileTypes%) DO ECHO.%%A & CALL :FileVersion "%%A" >> %OutFile%
ECHO.
ECHO.Results are in %OutFile%
pause
GOTO :eof

REM ========================= Subroutines =========================
:FileVersion
SETLOCAL
ECHO.
ECHO.File=%~1

SET LineNum=Invalid
FOR /F "tokens=1 delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^|  FIND /I "FileDescription"') DO SET LineNum=%%A
IF %LineNum%==Invalid GOTO :FileVer
SET /A LineNum += 1
FOR /F "tokens=1* delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND "[%LineNum%]"') DO SET FileDesc=%%B
IF NOT "%FileDesc%"=="FileVersion" SET FileDesc

:FileVer
SET LineNum=Invalid
FOR /F "tokens=1 delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND /I "FileVersion"') DO SET LineNum=%%A
IF %LineNum%==Invalid GOTO :ProductName
SET /A LineNum += 1
FOR /F "tokens=1* delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND "[%LineNum%]"') DO SET FileVer=%%B
SET FileVer

:ProductName
SET LineNum=Invalid
FOR /F "tokens=1 delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND /I "ProductName"') DO SET LineNum=%%A
IF %LineNum%==Invalid GOTO :ProductVer
SET /A LineNum += 1
FOR /F "tokens=1* delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND "[%LineNum%]"') DO SET ProductName=%%B
IF NOT "%ProductName%"=="ProductVersion" SET ProductName

:ProductVer
SET LineNum=Invalid
FOR /F "tokens=1 delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND /I "ProductVersion"') DO SET LineNum=%%A
IF %LineNum%==Invalid GOTO :Done
SET /A LineNum += 1
FOR /F "tokens=1* delims=[]" %%A IN ('STRINGS %1 ^| FIND /N /V "" ^| FIND "[%LineNum%]"') DO SET ProductVer=%%B
SET ProductVer

:Done
ENDLOCAL
GOTO:EOF
相关问题