mieki256's diary



2021/02/09(火) [n年前の日記]

#2 [prog] VBScriptでiniファイルを書き換える処理を書いてみた

.iniファイル内に書かれたフォルダパス(ディレクトリパス)を、現在フォルダで書き換えたいなと。

エディタで iniファイルを開いて、手作業で書き換えても目的は果たせるけれど、何度も試していると面倒臭い。ここは少しでも自動化したい。

ということで、WSH(VBScript)を使って、.ini ファイルを書き換えられないか試してみたり。環境は、Windows10 x64 20H2。

処理としては、以下のような感じ。
  1. スクリプトの置いてあるフォルダパス(カレントフォルダ)を取得。
  2. iniファイルの元になるテンプレートファイルが存在するか調べる。
  3. iniファイルがカレントフォルダ内に存在するか探す。
  4. テンプレートファイルを読み込んで、特定文字列(今回は "[INSTALL_DIR]") をフォルダパスで置換。
  5. 置換後の内容で、iniファイルを上書き更新。

テンプレートファイルは以下。

_template_ini.txt
fullscreen_bin=[INSTALL_DIR]\driveqp_scrsaver.exe
config_bin=wscript [INSTALL_DIR]\driveqp_scrsaver_about.vbs
preview_img=[INSTALL_DIR]\driveqp_scrsaver_preview.bmp

VBScript は以下。

_replace_ini.vbs
' スクリーンセーバラッパー scrsavwr 用の ini ファイルを生成するvbs(VBScript)
' フルスクリーン表示用プログラム群が入っているディレクトリ内で実行すると、
' template_ini.txt の内容に従って、パスを反映させたiniファイルを生成する。
'
' Generate an ini file for scrsavwr (screensaver wrapper).
' Run in the directory that contains the full screen program.
' Generate an ini file that reflects the path according to the contents of template_ini.txt. 

Option Explicit

Dim objFso
Dim objFile
Dim objDir
Dim cdir
Dim ini_name
Dim template_path
Dim ret
Dim cmdstr
Dim i
Dim s

ini_name = ""

template_path = "template_ini.txt"

set objFso = createObject("Scripting.FileSystemObject")
If Err.Number <> 0 Then
  MsgBox "Error : " & Err.Description
  WScript.Quit
End If

' Get folder path of the script file
cdir = objFso.getParentFolderName(WScript.ScriptFullName)

' Check exists template file
If objFso.FileExists(template_path) = False Then
  MsgBox "Not found : " & template_path, , "Error"
  Set objFso = Nothing
  WScript.Quit
End If

' Search ini file
Set objDir = objFso.GetFolder(cdir)
For Each objFile In objDir.Files
  If Right(objFile.Name, 4) = ".ini" Then
    ini_name = objFile.name
  End If
Next

If ini_name = "" Then
  ' Not found ini file
  MsgBox "Not found .ini file",, "Error"
  Set objFso = Nothing
  WScript.Quit
Else
  ' Found ini file
  ret = MsgBox("Found " & ini_name & vbCrLf & "Replace ?", vbYesNo + vbQuestion)
  If ret <> vbYes Then
    MsgBox "Cancel the process."
    Set ret = Nothing
    Set objFso = Nothing
    WScript.Quit
  End If
  Set ret = Nothing
End If

' Open template file
Set objFile = objFso.OpenTextFile(template_path)

' Record the contents of the file line by line in an array
i = 0
Do Until objFile.AtEndOfStream
  ' Extends the size of the array while preserving its contents
  redim Preserve lines(i)
  
  ' Read one line
  cmdstr = objFile.ReadLine
  
  ' Replace folder path
  lines(i) = Replace(cmdstr, "[INSTALL_DIR]", cdir)
  
  i = i + 1
Loop
objFile.Close

' Export to ini file
Set objFile = objFso.OpenTextFile(ini_name, 2, True)
For Each s In lines
  objFile.WriteLine(s)
Next
objFile.Close

MsgBox "Replace " & ini_name

Set objFso = Nothing
Set ObjFile = Nothing

これで、以下のようなファイルを同じフォルダに置いておいて…。 この状態で replace_ini.vbs を実行すれば、iniファイルの内容を書き換えることができるようになった。とメモ。

以上です。

過去ログ表示

Prev - 2021/02 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project