人に聞けない痔の悩み、これでスッキリ >>

特定フォルダにある、iniファイルを変更したいと思っています。

テキストファイルで変更するなら、

TestDateA=1

TestDateA=5

と変更するのは
1行ずつ読み込み、Replaceで出来ると思うのですが
iniファイルとなると特別なのか、調べてみても良く分かりません。

h ttp://yozda.exblog.jp/9552062/
この方が書いている通り、書けば良いのかもしれませんが
自分で理解していない分、このまま使うのは不安です。
クラスを使うとなると余計にわかりません・・・。

ReadLineで読み込み、特定の文字を含んだらReplaceみたいな
方法は使えないでしょうか?
それ以外に何か方法はありますでしょうか?

以上、よろしくお願い致します。

A 回答 (1件)

> 特定フォルダにある、iniファイルを



セクションなんかが指定されている、Windowsやレジストリエディタで扱えるしっかりとしたiniファイルなのか?単に拡張子が.iniのファイルなのか?で話が違います。
前者と仮定して、

> それ以外に何か方法はありますでしょうか?

WindowsAPIのWritePrivateProfileStringを使うとかが真っ当だと思います。

なっちゃんのプログラミングTips: INIファイルの読み書き
http://natchan-develop.seesaa.net/article/111204 …

WritePrivateProfileStringはWindowsに用意されている、セクション名やキー名を指定してiniファイルへ書き込みを行うためのインターフェースです。
Replaceの処理の中身でForやMidみたいな関数が使われてるなんて事考える必要が無いのと同様に、WritePrivateProfileStringの中で置換がどうとかって事は考える必要が無いです。

--
> と変更するのは
> 1行ずつ読み込み、Replaceで出来ると思うのですが
> iniファイルとなると特別なのか、調べてみても良く分かりません。

いわゆるWindowsで扱うiniファイルであれば、一応フォーマットが定まっています。
通常、iniファイルにアクセス、値の書き込みを行う場合、セクション名、キー名で対象の値を指定します。
セクション名が違って、同じキー名の複数の値をまとめて変更しちゃうなんて事は望ましくないです。
自分で書き出したデータを.xlsとか.docって拡張子にしたら紛らわしいのと一緒で、独自の処理するのであれば別の拡張子にしとくのが良いです。

INIファイル - Wikipedia
http://ja.wikipedia.org/wiki/INI%E3%83%95%E3%82% …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

情報不足で申し訳ありません。
特定キーの1つの値しか変更する予定はありません。

Windowsで扱うiniファイルだと思います。
フォーマットが決まっているため、問題無いかと思います。

詳しく回答頂き、ありがとうございます!
参考にし、1行ずつ理解していこうと思います^^

お礼日時:2014/07/29 12:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qbatファイル処理でのテキストファイルの内容を編集

batファイル処理のみにてテキストファイルの内容を編集する事は可能でしょうか。

例えば
aaa=0
bbb=0
ccc=0
ddd=0

という内容のテキストファイルが存在し、batファイルにて
aaa=0
bbb=1
ccc=1
ddd=0

というように、指定行の内容を変更させたいのですが、この処理をbatファイルのみで行う事は可能でしょうか。

宜しくお願いします。

Aベストアンサー

こんな感じですか?
パスは適切に設定してください
----- a.bat -----
cd c:\foo\bar
if exist test.bak goto skip
copy test.ini test.bak
cscript a:\hogehoge\replace.vbs test.ini
:skip
----- a.bat ここまで -----

----- replace.vbs -----
Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
objFile.Close
strText = Replace(strText, "bbb=0", "bbb=1")
strText = Replace(strText, "ccc=0", "ccc=1")

Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.WriteLine strText
objFile.Close
----- replace.vbs ここまで -----

参考URL:http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/feb05/hey0208.mspx

こんな感じですか?
パスは適切に設定してください
----- a.bat -----
cd c:\foo\bar
if exist test.bak goto skip
copy test.ini test.bak
cscript a:\hogehoge\replace.vbs test.ini
:skip
----- a.bat ここまで -----

----- replace.vbs -----
Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
obj...続きを読む

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

よろしくお願い致します。

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QVBscriptからバッチに変数を渡すには?

VBscriptからバッチに文字列を渡したいのですが、どう書いたらいいでしょうか?

VBscriptにWscript.Quit 1と数字を入れた場合、バッチ側は%errorlevel%で取得できると思うのですが、文字列は出来ませんでした。

よろしくお願いします。

Aベストアンサー

こんな感じでできると思います。

[VBS側]
'環境変数に格納したい値をEchoして終了
WScript.Echo kekka

[バッチ側]
for /f "usebackq tokens=*" %%i IN (`call cscript //nologo <vbsフルパス>\hoge.vbs`) DO @set vbskekka=%%i

※INの中のクォートはバッククォートである点に注意

私はこんな感じでよく使っていて、もちろん文字列もOK
ですが、日本語が扱えるかどうかは未検証です。
(半角英数以外はつかった事がない)

QVBScriptでCSVファイルを読み出したい

現在VBScriptでCSVファイルを1行ずつ読み取って、2次元配列に格納するプログラムを作成しています。
CSVファイルの中身は、サンプルで
shop,price,sales
001,500,700
003,1200,90
024,,18 という並びになっています。
実データは300件くらいです。
1行目のヘッダーを読み飛ばし、2行目のデータから1行ずつ読取、","でsplitを用いてまず1次配列に格納しています。
1次元配列のarrLine(0)=001、(1)=500、(2)=700と入ったデータを
2次元配列arrshopに順次保存?したいのです。
----------------------------------------------
dim strLine '1行ずつ読込んだデータを持つ
dim ntLineNum '行数のカウント
dim arrLine '","で区切った要素を持つ一次元配列
dim arrshop '一次元配列になった要素を2次元配列として格納

Do until .AtEndOfStream
  strLine = .ReadLine
  if 0<>strComp("",Trim(strLine)) then
ntLineNum = intLineNum + 1
  end if
  arrLine = split(strLine , ",")
  arrshop = Array(arrLines,i)
i = i + 1
loop
-----------------------------------------
msgbox arrshop(2)(0) と指定すると「003」出るようにしたいです。
Array関数が上手くないような気もします・・・。
どなたかご教授お願いします(>_<。)

現在VBScriptでCSVファイルを1行ずつ読み取って、2次元配列に格納するプログラムを作成しています。
CSVファイルの中身は、サンプルで
shop,price,sales
001,500,700
003,1200,90
024,,18 という並びになっています。
実データは300件くらいです。
1行目のヘッダーを読み飛ばし、2行目のデータから1行ずつ読取、","でsplitを用いてまず1次配列に格納しています。
1次元配列のarrLine(0)=001、(1)=500、(2)=700と入ったデータを
2次元配列arrshopに順次保存?したいのです。
--------------------------...続きを読む

Aベストアンサー

Arrayのところがおかしいですね。

動くか検証してないですが…
arrshop = Array(arrLines,i)
の代わりに
Redim Preserve arrshop(i+1)
arrshop(i)=arrLines
でやってみてください。
それと最初にiは0か1にでも初期化してから使う事をお勧めします。

Qvbsでテキストファイル内の文字列検索

初心者です。

テキストファイルを指定し、含まれる文字列を検索し、
結果表示したいと考えております。

色々探して、以下で作成したのですが、
うまく動いてくれません。

出来ましたら、テキストファイルの中の文字列の
一部分を指定して動作させたいと思っております。

どなたかご教示のほど宜しくお願い致します。


----------------------------------------------------

Set WSHFso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
Dim strSearchWord

Set tmpFile = WSHFso.OpenTextFile("C:\AAA.txt")

Do Until tmpFile.AtEndOfStream
tmpLine = tmpFile.ReadLine
strSearchWord = strSearchWord & tmpLine & vbcrlf
Loop


Dim SearchWord
SearchWord = split(strSearchWord," ")


if InStr(SearchWord(ix), "test")<>0 then
WScript.Echo " testを含みます。"
else
WScript.Echo " testを含みません。"

end if


----------------------------------------------------

初心者です。

テキストファイルを指定し、含まれる文字列を検索し、
結果表示したいと考えております。

色々探して、以下で作成したのですが、
うまく動いてくれません。

出来ましたら、テキストファイルの中の文字列の
一部分を指定して動作させたいと思っております。

どなたかご教示のほど宜しくお願い致します。


----------------------------------------------------

Set WSHFso = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell...続きを読む

Aベストアンサー

こんにちは。

コードの細かい部分の目的としている部分は良く分からないけれども、少し直してみました。あくまでも、VBSです。元のコードは、ちょっと違うようです。

'-------------------------------------------

Set WSHFso = CreateObject("Scripting.FileSystemObject")
'Set WshShell = CreateObject("WScript.Shell") '??
Dim strSearchWord
dim i
'-------------------------------------------
Public Const FileName ="C:\AAA.txt"
Public Const sWord =""test"
'-------------------------------------------
Set tmpFile = WSHFso.OpenTextFile(FileName)

Do Until tmpFile.AtEndOfStream
tmpLine = tmpFile.ReadLine
i = i + 1
nflg= fSearchWord (tmpLine)
If nflg Then Exit Do
Loop
If nflg Then
MsgBox i & "行目に" & sWord &"を含みます。",64
Else
MsgBox sWord &"を含みませんでした。",48
End If
'-------------------------------------------
Function fSearchWord(tmpLine)
Dim flg
SearchWord = Split(tmpLine," ")
For ix = LBound(SearchWord) To UBound(SearchWord)
If Len(Trim(SearchWord(ix))) > 0 Then
If InStr(1, SearchWord(ix), sWord, 1) > 0 Then
flg = True
Exit For
End If
End If
Next
fSearchWord = flg
End Function
'-------------------------------------------

こんにちは。

コードの細かい部分の目的としている部分は良く分からないけれども、少し直してみました。あくまでも、VBSです。元のコードは、ちょっと違うようです。

'-------------------------------------------

Set WSHFso = CreateObject("Scripting.FileSystemObject")
'Set WshShell = CreateObject("WScript.Shell") '??
Dim strSearchWord
dim i
'-------------------------------------------
Public Const FileName ="C:\AAA.txt"
Public Const sWord =""test"
'---------------------...続きを読む

Qbatファイルの結果をテキストに吐き出すには?

以下のようなWindowsユーザーのパスワード変更batの結果(正常に出来たかどうか?)をCドライブに吐き出したいのですが、どうbatファイルを書き換えればよいでしょうか?
(とりあえず以下の内容でbatをたたいたのですが、うまく結果が出ません。。。)

henkou.bat
--------------------------------------
net user "test user1" ps123456 /domain
net user "test user2" ps456789 /domain
henkou.bat > c:\henkou結果.txt
pause
--------------------------------------

吐き出されたhenkou結果.txt
--------------------------------------
C:\>net user "test user1" ps123456 /domain
--------------------------------------

DOS画面(吐き出したいもの)
--------------------------------------
C:\>net user "test user1" ps123456 /domain
コマンドは正常に終了しました。

C:\>net user "test user2" ps456789 /domain
コマンドは正常に終了しました。

C:\>henkou.bat 1>c:\henkou結果.txt
--------------------------------------

以下のようなWindowsユーザーのパスワード変更batの結果(正常に出来たかどうか?)をCドライブに吐き出したいのですが、どうbatファイルを書き換えればよいでしょうか?
(とりあえず以下の内容でbatをたたいたのですが、うまく結果が出ません。。。)

henkou.bat
--------------------------------------
net user "test user1" ps123456 /domain
net user "test user2" ps456789 /domain
henkou.bat > c:\henkou結果.txt
pause
--------------------------------------

吐き出されたhenkou結果.t...続きを読む

Aベストアンサー

henkou.bat
--------------------------------------
@ECHO OFF

IF NOT EXIST %temp%\Redirect.txt GOTO REDIREXEC

@ECHO ON

net user "test user1" ps123456 /domain
net user "test user2" ps456789 /domain

@ECHO OFF

GOTO END

:REDIREXEC

ECHO REDIRECT > %temp%\Redirect.txt

CALL TEST.BAT > c:\henkou結果.txt

DEL %temp%\Redirect.txt

PAUSE

:END
--------------------------------------

こんな感じでどうでしょうか。

Qバッチファイルで2つ以上の変数を連結し、1つの変数にしたい。

Windows2000でバッチファイルを作っています。
バッチファイルが受け取る2つのパラメータを %1 %2とすると、
それを連結して、新たな変数 A を作りたいのですが、どのようにすれば良いのでしょうか。

Aベストアンサー

SETで変数にパラメータをセットすればOKだと思います。

例)
SET A=%1%2
echo %A%

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QVBSでxmlの値を書き換えたい

お世話になります。
VBScriptで作成しています。

A.xmlの「sx」の値を全て200にしたいと思っております。
A.xmlの値を抜き取って、OKフォルダに複製する処理は
作ったのですが、どのようにして、sxを指定・その中の値を
変更するのかわかりません。

お手数ですが、ご教授お願いいたします。

------------------A.xml----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<links>
<link id="0" name="" title="">
<sx>145</sx>
<sy>142</sy>
</link>
<link id="1" name="" title="">
<sx>495</sx>
<sy>142</sy>
</link>
<link id="2" name="" title="">
<sx>155</sx>
<sy>510</sy>
</link>
</links>

---------------------------------------------------
------スクリプト------------------------------------------------
Set Fso = CreateObject("Scripting.FileSystemObject")
Set objXML = CreateObject("Msxml2.DOMDocument.3.0")

' カレントディレクトリ
str = WScript.ScriptFullName
Set obj = Fso.GetFile( str )
Set obj = obj.ParentFolder
str = obj.Path

' XML を読み込み
objXML.load( str & "\A.xml" )

**********************************************************
'''ここで、sxの属性の値を変更したい
**********************************************************

' XML を保存
objXML.save( str & "\OK\A.xml" )
------------------------------------------------------

お世話になります。
VBScriptで作成しています。

A.xmlの「sx」の値を全て200にしたいと思っております。
A.xmlの値を抜き取って、OKフォルダに複製する処理は
作ったのですが、どのようにして、sxを指定・その中の値を
変更するのかわかりません。

お手数ですが、ご教授お願いいたします。

------------------A.xml----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<links>
<link id="0" name="" title="">
<sx>145</sx>
<sy>142</sy>
</link>
<link id="1" name="" title...続きを読む

Aベストアンサー

SelectNodesを使って抽出を行えば いいと思いますよ

dim objList, objNode

Set objList = objXml.SelectNodes("//links/link/sx")
for each objNode in objList
  objNode.Text = "200"
next

といった具合です


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報