VBScriptで環境変数の値を取得する方法

Programming プログラミング

VBScriptで「環境変数」の値を取得する場合は、シェルオブジェクトの「ExpandEnvironmentStrings」メソッドを使用する。

スポンサーリンク

使い方は以下のよう。

Option Explicit

'変数
Dim objShell
Dim tmp

'シェルオブジェクト作成
Set objShell = CreateObject("WScript.Shell")

'環境変数取得
tmp = objShell.ExpandEnvironmentStrings("%TMP%")

'環境変数表示
WScript.Echo tmp

'シェルオブジェクト破棄
Set objShell = Nothing

参考サイト

VBScript Tips (Tips0115)

コメント

  1. VBS より:

    管理人様
    はじめまして
    質問させて下さい。

    C:\Users\ユーザー名\Desktop\AAA\a.txt ‘隠しファイル
    C:\Users\ユーザー名\Desktop\AAA\b.txt ‘隠しファイル

    上の2つのファイルを、C:\PROGRA~2\bbb\にコピー(上書き)したいのですが
    %username%でエラーがでます。
    どのように記述すれば良いのでしょうか?
    宜しければ教えて下さいませ。

    下記は、エラーが出るコードです。
    宜しくお願い致します。

    ‘——————————————————————————–
    Dim Fso
    Set Fso = CreateObject(“Scripting.FileSystemObject”)
    Fso.CopyFile “C:\Users\%username%\Desktop\AAA\a.txt”, “C:\PROGRA~2\bbb\”
    Fso.CopyFile “C:\Users\%username%\Desktop\AAA\b.txt”, “C:\PROGRA~2\bbb\”
    Set Fso = Nothing

    Dim fs
    Dim fn
    Set fs = WScript.CreateObject(“Scripting.FileSystemObject”)
    Set fn = fs.GetFile(“C:\PROGRA~2\bbb\a.txt”)
    fn.attributes = 0

    Set fs = WScript.CreateObject(“Scripting.FileSystemObject”)
    Set fn = fs.GetFile(“C:\PROGRA~2\bbb\b.txt”)
    fn.attributes = 0
    ‘——————————————————————————–

  2. hide より:

    コメントありがとうございます。
    Windows10で実行してみました。
    コマンドプロンプトを開いてsetコマンドで環境変数USERNAMEに値が入っていることは確認できましたが、VBS内で「Wscript.Echo %USERNAME%」としてもその環境変数の値は展開されませんでした。
    ですので、WScript.ShellオブジェクトのExpandEnvironmentStrings関数で取得してみました。
    以下のように修正しました。

    あと、「C:\Program Files」以下にファイル作成する場合は、管理者として実行しないとエラーになると思います。

    ================================================
    Dim Fso
    Dim Shell
    Set Fso = CreateObject(“Scripting.FileSystemObject”)
    set Shell = WScript.CreateObject(“WScript.Shell”)
    username = Shell.ExpandEnvironmentStrings(“%USERNAME%”)
    Fso.CopyFile “C:\Users\” & username & “\Desktop\AAA\a.txt”, “C:\PROGRA~2\bbb\”
    Fso.CopyFile “C:\Users\” & username & “\Desktop\AAA\b.txt”, “C:\PROGRA~2\bbb\”
    Set Fso = Nothing

    Dim fs
    Dim fn
    Set fs = WScript.CreateObject(“Scripting.FileSystemObject”)
    Set fn = fs.GetFile(“C:\PROGRA~2\bbb\a.txt”)
    fn.attributes = 0

    Set fs = WScript.CreateObject(“Scripting.FileSystemObject”)
    Set fn = fs.GetFile(“C:\PROGRA~2\bbb\b.txt”)
    fn.attributes = 0
    ================================================

  3. VBS より:

    管理人様
    ありがとうございます。

    仰る通り、Win7ではコピーできますが
    Win8.1だとエラーになります。
    エラーにならないようにはできませんでしょうか?
    宜しくお願い致します。

  4. VBS より:

    連投すいません。
    削除の方なのですが、
    ‘———————————————————————-
    Option Explicit
    On Error Resume Next

    Dim FSO
    Dim DelFile

    DelFile = “C:\PROGRA~2\bbb\*.ini”
    Set FSO = WScript.CreateObject(“Scripting.FileSystemObject”)
    If Err.Number = 0 Then
    FSO.DeleteFile DelFile, True
    If Err.Number = 0 Then
    WScript.Echo DelFile & ” を削除しました。”
    Else
    WScript.Echo “エラー: ” & Err.Description
    End If
    Else
    WScript.Echo “エラー: ” & Err.Description
    End If

    Set FSO = Nothing
    ‘———————————————————————-

    このコードで
    “C:\PROGRA~2\bbb\*.ini”を削除
    “C:\PROGRA~2\ccc\*.ini”を削除

    “C:\PROGRA~2\bbb\*.ini”にファイルがなければスルーし、
    “C:\PROGRA~2\ccc\*.ini”を削除して完了。

    “C:\PROGRA~2\ccc\*.ini”にファイルがなければスルーし、
    “C:\PROGRA~2\bbb\*.ini”を削除して完了。

    両方のフォルダ内にファイルがなければ、
    WScript.Echo “エラー: ” & Err.Description

    このようなことは可能でしょうか?
    教えて下さいませ。
    宜しくお願い致します。

  5. hide より:

    エラーというのは権限がないという内容のエラーで、管理者で実行しても同じということですか?
    Windows 8.1がないので確認できませんが、Program Filesフォルダは特殊な扱いで、ユーザーアカウント制御(UAC)が関係してたような気がします。
    「Windows 8.1 Program Files UAC」あたりでググってみてください。

  6. hide より:

    FileSystemObjectのFileExists関数でファイルの存在チェックはできるようですが、*のワイルドカードは使用できないようです。
    なので、フォルダ内のファイルを取得してループ、拡張子.iniかどうか判定すればいいかと。
    DeleteFile関数は*のワイルドカード使用可らしいです。
    以下のようにすればいいのでは。
    両方のフォルダにあった場合どうするのか分かりませんが。

    ======================
    「C:\PROGRA~2\bbb\」のファイル一覧をループ
     拡張子.iniか判定し、bbbの結果をフラグ変数に保持
    ループ終了

    「C:\PROGRA~2\ccc\」のファイル一覧をループ
     拡張子.iniか判定し、cccの結果をフラグ変数に保持
    ループ終了

    bbbの結果 = True かつ cccの結果 = Falseの場合
     「C:\PROGRA~2\bbb\*.ini」をDeleteFile関数で削除
    bbbの結果 = False かつ cccの結果 = Trueの場合
     「C:\PROGRA~2\ccc\*.ini」をDeleteFile関数で削除
    bbbの結果 = False かつ cccの結果 = Falseの場合
     エラー
    ======================

  7. VBS より:

    管理人様
    ありがとうございます。

    差し支えなければ例のコードを提示していただけないでしょうか?
    宜しくお願いします。

タイトルとURLをコピーしました