ハードなソフトの話

アクセスカウンタ

zoom RSS Path環境変数から存在しないパスを削除する

<<   作成日時 : 2009/08/06 23:39   >>

ナイス ブログ気持玉 3 / トラックバック 0 / コメント 0

プログラムのアンインストールをしてもシステムのPATH環境変数から自分のパスを削除しないプログラムが多い。長期間これを繰り返すとPATH環境変数に不要なゴミパスが溜まっていく。しかし、WindowsOSの機能ではチェックできない。ひとつずつ調べるのも面倒である。
そこで、「Windowsの環境変数について少し詳しく(6)〜Path環境変数をリスト化してみる〜」で作成したPathlist.vbsを使ってPATH環境変数の中にある不要なパスを表示するバッチファイル(checkexist.bat)を作成した。checkexist.bat の内容は次の通り。
@echo off
setlocal
set etype=%1
set mode=%2

if "%mode%"=="ok" call :OK_mode
if "%mode%"=="ng" call :NG_mode
if "%mode%"=="check" call :CHK_mode
goto :eof

:OK_mode
for /F "usebackq delims=;" %%i in ( `cscript //nologo pathlist.vbs %etype%` ) do (
    if exist %%i echo %%i
)
goto :eof

:NG_mode
for /F "usebackq delims=;" %%i in ( `cscript //nologo pathlist.vbs %etype%` ) do (
    if not exist %%i echo %%i
)
goto :eof

:CHK_mode
for /F "usebackq delims=;" %%i in ( `cscript //nologo pathlist.vbs %etype%` ) do (
    if exist %%i (echo OK %%i) else (echo NG %%i)
)
goto :eof

endlocal

このバッチファイルのあるパスにpathlist.vbsをコピーして次のように実行してみた。
checkexist system check

手元にあるWindowsXPで実行してみると次のような結果になった。
OK c:\program files\imagemagick-6.2.8-q16
OK C:\Program Files\Real\RealProducer Basic 10
OK C:\WINDOWS\system32
OK C:\WINDOWS
OK C:\WINDOWS\System32\Wbem
OK C:\Program Files\Common Files\Ulead Systems\MPEG
NG C:\Program Files\Edy\Edy Viewer
NG c:\bin
NG \usr\bin
OK C:\strawberry\c\bin
OK C:\strawberry\perl\bin
OK c:\tcl\bin
NG C:\PROGRA~1\JPKI
OK C:\strawberry\c\bin
OK C:\strawberry\perl\bin
OK c:\Program Files\Log Parser 2.2

システム環境変数のPATHの中で存在するものは”OK"、存在しないものは"NG"になる
NGパスだけを表示するには次のように入力する
checkexist system ng

結果は次のようになる。
C:\Program Files\Edy\Edy Viewer
c:\bin
\usr\bin
C:\PROGRA~1\JPKI

ここまで来ると、環境変数の設定も自動化したい。そこでパスリストをPATH環境変数に設定するスクリプト(setpathlist.vbs)を作成した。
option explicit

dim aTypelist: aTypelist = array("System","User")
dim arg
set arg = WScript.Arguments
if arg.count <> 1 then
   WScript.echo "コマンド引数に " & join(atypelist,",") & " のいずれかを指定してください"
   WScript.quit
end if

dim p,bCorrect
bCorrect=false
for each p in ( aTypeList )
    if lcase(p) = lcase(arg(0)) then
        bCorrect = true
        exit for
    end if
next
if not bCorrect then
   WScript.echo "コマンド引数に " & join(atypelist,",") & "以外は指定できません"
   WScript.quit
end if
dim sType: sType = arg(0)

dim strLine,iCount,stdin
set stdin = WScript.stdin
iCount = 0
strLine = ""
do until stdin.atEndOfStream
    strLine = strLine & trim(stdin.readline) & vbLf
loop
dim aPathlist
if right(strLine,1) = vbLf then strLine = left(strLine,len(strline)-1)
aPathlist = split(strLine,vbLf)
setPathList sType, aPathlist

sub setPathlist(sType,aPathlist)
    dim wshell,wshEnv,vPath,msg,result
    set wshell = createobject("WScript.Shell")
    set wshEnv = wshell.environment(sType)
    vPath = join(aPathlist,";")
    msg = sType & "の環境へ下記の環境変数を設定します" & _
         VbCrLf & vbCrLf & vbTab & "Path=" & vPath 
    result=msgbox(msg,vbOk,"実行の確認")
    if result = vbOk then
        wshEnv("Path") = vPath
        if wshEnv("Path") = vPath Then
            wscript.echo "正常に設定しました"
        else
            wscript.echo "設定に失敗しました"
        end if
    end if
end sub

このスクリプトはPATH環境変数にパスリストを設定する。
たとえば、存在するパスのみをシステムの環境変数に設定したいときはコマンドプロンプトで次のようにする。
checkexist system ok | cscript //nologo setpathlist.vbs

このスクリプトでは実際に環境変数を設定する前に次のメッセージボックスが表示されるので、よく確認したほうがいい。
画像

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 3
ナイス ナイス
かわいい

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Path環境変数から存在しないパスを削除する ハードなソフトの話/BIGLOBEウェブリブログ
文字サイズ:       閉じる