【お題】NEW演歌

VBスクリプトを使ってファイルを置換したいと考えています。
以下のVBSファイルとコマンドを使って、置換することはできました。
が、置換対象が「改行」と「"」の場合、エラーとなって置換できません。
どうすればいいのでしょうか。
よろしくおねがいします。

********コマンド********
(1)cscript replace.vbs "C:\test.txt" "Jim" "Jane"
(2)cscript replace.vbs "C:\test.txt" ""_\n" "a_test"

********VBSファイル(replace.vbs)********
Const ForReading = 1
Const ForWriting = 2
strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOldText, strNewText)
Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.WriteLine strNewText
objFile.Close

(1)のコマンドを実行すると、
「Jim」は「Jane」に置換されますが、
(2)のコマンドを実行すると、エラーになり置換されません。

エラーメッセージ:
「Microsoft VBScript 実行時エラー: インデックスが有効範囲にありません。」

よろしくおねがいします。

A 回答 (2件)

cscript replace.vbs "C:\test.txt" ""_\n" "a_test"


というコマンドラインだと、
Argument(1) は "_\n空白a_test" になり、Argument(2) は存在しません。従って、Argument(2)のところで「インデックスが有効範囲にありません」というエラーになります。

・二重引用符" をコマンドライン引数としてVBScriptに与えることは出来ません
 (例えば一重引用符'で代用する)
・\n という文字列を「改行」と見なす処理は自分で書かないといけません
 (例えば、"\n" を vbCRLF にReplaceする)

strOldText = Replace(Replace(Wscript.Arguments(1),"\n",vbCRLF),"'","""")
等として、
cscript replace.vbs "C:\test.txt" "'_\n" "a_test"

この回答への補足

すいません。
以下のように変更したらできました。

>strNewText = Replace(Replace(Wscript.Arguments(2),"\n",vbCRLF),"'","""")

ありがとうございました。

補足日時:2008/12/16 11:24
    • good
    • 0
この回答へのお礼

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

>strOldText = Replace(Replace(Wscript.Arguments(1),"\n",vbCRLF),"'","""")
>等として、
>cscript replace.vbs "C:\test.txt" "'_\n" "a_test"

おしえていただいたように修正したらできました。
ありがとうございます。
以下のコマンドプロンプトのように、
置換後にReplace関数を使おうと思うと、
置換されずそのまま「'_\n」となってしまいます。

cscript replace.vbs "C:\test.txt" "A_B" "'_\n"

Aは「"」、Bは「改行」に置換することはできるのでしょうか。

お礼日時:2008/12/16 11:14

以下のようにして見て下さい。



「改行」の場合
  strNewText = Replace(strText, vbCrLf, "a_test")

「"」の場合
  strNewText = Replace(strText, """", "b_test")
    • good
    • 0
この回答へのお礼

ありがとうございます。
ためしてみます。

お礼日時:2008/12/16 13:05

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

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


おすすめ情報