如何利用批次檔判斷某程式的版本?



贊助商連結


bobhsieh
2009-06-08, 11:47 PM
如何利用批次檔判斷某程式的版本?
而某程式是指一般小程式或是綠色軟體之類...

因工作上有這個需求,
但又不會寫程式,
所以想利用.cmd / .bat 來處理這個問題,
但又找不到相關的資訊,
所以來請教各位前輩 ...

工作環境是在Win XP/2003

贊助商連結


tvirus
2009-06-09, 03:16 AM
你的講法太糢糊了

版本?

bx2aa
2009-06-09, 11:04 AM
至少給個範例程式比較容易測試.

通常會有個 -V 來顯示版本, 但是不一定, 有的只有圖形或是連執行都不行(例:msiexec /?).

C:\Documents and Settings\bx2aa>sed -V
GNU sed version 2.02

C:\Documents and Settings\bx2aa>sed -V 2> sed.txt

C:\Documents and Settings\bx2aa>gawk
Gnu Awk (gawk) 2.15, patchlevel 0
usage: gawk [POSIX or GNU style options] -f progfile [--] file ...
gawk [POSIX or GNU style options] [--] 'program' file ...

POSIX options: GNU long options:
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
-W compat --compat
-W copyleft --copyleft
-W copyright --copyright
-W help --help
-W lint --lint
-W posix --posix
-W source=program-text --source=program-text
-W usage --usage
-W version --version

C:\Documents and Settings\bx2aa>gawk 2> gawk.txt

C:\Documents and Settings\bx2aa>type gawk.txt | grep "Gnu Awk"
Gnu Awk (gawk) 2.15, patchlevel 0

C:\Documents and Settings\bx2aa>type gawk.txt | grep "Gnu Awk" | cut -c16-19
2.15

C:\Documents and Settings\bx2aa>type gawk.txt | grep "Gnu Awk" | cut -c16-19 > gawk1.txt

C:\Documents and Settings\bx2aa>for /F %i in (gawk1.txt) do set test=%i

C:\Documents and Settings\bx2aa>set test=2.15

C:\Documents and Settings\bx2aa>echo %test%
2.15

C:\Documents and Settings\bx2aa>if %test%==2.15 echo YES
YES

TEST.BAT
=================== start ========================
@ECHO OFF
CLS
gawk 2> gawk.txt
type gawk.txt | grep "Gnu Awk" | cut -c16-19 > gawk1.txt
for /F %%i in (gawk1.txt) do set test=%%i
set test=2.15
if %test%==2.15 echo YES
pause > nul
=================== END ========================

執行結果:
YES

需有 UnxUtils
GNU utilities for native Win32
http://sourceforge.net/projects/unxutils
http://sourceforge.net/project/showfiles.php?group_id=9328&package_id=9393&release_id=490307
http://downloads.sourceforge.net/unxutils/UnxUtils.zip?modtime=1172730504&big_mirror=0
把解開 usr\local\wbin 裡面的 cut grep sed gawk 複製到和 test.bat 同目錄下

threesecond
2009-06-09, 05:07 PM
不見得一定要從執行檔判斷,
只要是安裝的程式應該都會在 HKLM\Software 裡面寫入機碼,
用 reg.exe 去撈機碼多半也可以撈到版本。

琥珀
2009-06-09, 05:16 PM
可使用 sigcheck (http://technet.microsoft.com/en-us/sysinternals/bb897441.aspx) 檢查。

bx2aa
2009-06-09, 07:19 PM
用 reg 去撈出來的有個問題是當移除後還遺留的問題.

用 sigcheck.exe 可以抓出 msiexec 的版本, 我用的綠色軟體 TMPGEnc 也可以抓到版本.
G:\Sigcheck>sigcheck -n "TMPGEnc.exe"

sigcheck v1.60 - sigcheck
Copyright (C) 2004-2009 Mark Russinovich
Sysinternals - www.sysinternals.com

2.54.37.135

我個人建議, 不如從現在開始把安裝目錄名稱用版本當路徑安裝那應該很容易抓到.
但是軟體已經寫死的就沒辦法.