• 締切済み

VBScriptの文字化けについてご質問

VBScriptに関してご質問です。 下記サイトのチュートリアルを参考にファイル一覧表を作るスクリプトを作成しました。 http://journal.mycom.co.jp/articles/2009/07/10/wsh/index.html ローカルPC上での動作は問題なかったのですが、他の環境で実行すると日本語が文字化けしてしまいます。たとえばC:\テストをスクリプトにドラッグして実行するとWScript.Arguments.Item(0)で取得したファイルパスがC:\???となってしまいます。その後の処理でフォルダパスが見つかりませんとエラーになります。 文字コードの問題だと思っているのですが、なかなかよい解決策が見つかりません。 何かよい方法または回避策等ありましたらご教授願います。

みんなの回答

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

 VBScriptはその名前のとおり、スクリプトコードを記述した単なるテキストファイルです。スクリプトを解釈し実行しているのは別のプログラムです。  マイクロソフト社のWindows系のOSでは、.vbsのファイルはデフォルトで、 wscript.exeというプログラムが関連付けされ、.vbsを選べば、その.vbsが 実行されます。また、参考にされたスクリプトの中で使われている "Scripting.FileSystemObject"というのもWindows系のOSのファイルシステム のみ対象としています。

関連するQ&A

  • HTML + VBScript で Sleep できない

    お世話になります。ご教授ください。 類似の質問が既にあるのかもしれませんが、質問させていただきます。。。 HTML上に記述するVBScriptでは、WScriptは使用できないという記事を見かけます。 実際、HTML+VBScriptで使用すると、 変数は宣言されていません:'WScript' とエラーが出ました。 WSH は WScript のインスタンスを読み込むことができないうんぬん、と書かれていました。 書きたいことは、 WScript.Sleep 1000 です。 もしくは、これに変わる何かがしたいです。 外部ファイル化(.vbs)を試してみましたが、ダメでした。 ==== サンプル(Sample.vbs) ==== Option Explicit MsgBox "start" Dim Idx = 0 Do While Idx <> 3 WScript.Sleep 1000 MsgBox Idx Idx = Idx + 1 Loop WScript.Sleep 1000 MsgBox "end" ================ <html> <head> <meta http-equiv="Content-Script-Type" content="text/vbscript"> <script language="VBScript" type="text/vbscript" src="sample.vbs"></script> </head> … という感じです。 上記はあくまでサンプルですが、最終的には「ループの中で」待ち状態、になるようにしたいです。 Do While ある条件 1秒待ち ある条件に、なるかならないか Loop (setTimeout を使用する例が書かれていましたが、それではループ制御は走り続け、CPUが痛い目に合いました。。。) もしかして、WScript は使用できるのに、記述ミスかもしれませんし。。。 できない場合は、それに変わる案などいただけるとありがたいです。 よろしくお願いします。

  • VBscriptで「改行」と「"」を置換させる

    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 実行時エラー: インデックスが有効範囲にありません。」 よろしくおねがいします。

  • VBScript でのformat

    VBScript で、数値をフォーマットしたいのですが、 以下のようなエラーになります。 Microsoft VBScript 実行時エラー: この変数は宣言されていません。: 'Format' スクリプトの内容は以下のとおりです。 Wscript.Echo Format(13, "0000") OSはWindowsXPホームエディション(SP2)です。 よろしくお願いします。

  • VBScript(WSH)でのランダムアクセス

    VBScript(WSH)を用いてファイル内を検索し、特定文字列の次の行に文字列を追加するスクリプトを作成しています。 シーケンシャル方式を用いた方法では作ることが出来ました。 ただ、それだと一度全ての行をを読み込み特定位置に追加した後、もう一度全て上書きしているため処理が多くなってしまいます。 そこでランダムアクセスを用いて任意の位置に文字列を挿入できないかと考えました。 VBの Open ファイルパス For Random As ~ も試しましたがうまく動きませんでした。(構文として認識していない?) VBSでのランダムアクセスは不可能なのでしょうか? 良い方法がございましたらご教授ください。 よろしくお願いします。

  • VbscriptでIEのコントロール

    以下の2つのサイトを参考にIEの自動処理を作っています。 「IE 画面を、スクリプトで操作する (パソコン便利ツール集)」 http://makoto-watanabe.main.jp/htmlDOM.html 「WSH JScriptを使いこなそう ~キーボード操作~」 http://3rd.geocities.jp/kaito_extra/Source/KeybordCtrl.html そこで簡単なhtmlページを作り、javascriptの「confirm」を使って確認メッセージを表示しました。 この確認メッセージの「OK」か「キャンセル」をVbscriptの「SendKeys」を使ってコントロールしようとしてるのですが全く反応しません。 何がいけないのでしょうか? もちろん確認メッセージはアクティブの状態です。 開いたIEのオブジェクトなどでコントロールしないといけないのでしょうか? ちなみに、html内のjavascriptは次のようにしています。 <script Language="JavaScript"> <!-- confirm("よろしいですか?") //--> </script> Vbscriptは次の通りです。 Set objWshShell = Wscript.CreateObject("Wscript.Shell") Set objIE = CreateObject("InternetExplorer.Application")'IEの起動 objIE.Visible = True 'IEウィンドウを表示 siteurl = "http://テスト用のサイト/test.html" objIE.Navigate2 siteurl'指定ページを開く While objIE.ReadyState <> 4 Or objIE.Busy = True WScript.Sleep 1000 Wend objWshShell.SendKeys("{enter}") objIE.Quit Set objIE = Nothing WScript.quit

  • VBScriptで引数を認識しない

    自分が利用しているマシンにおいて、 WScriptで引数を認識しなくなってしまいました。 CScriptなら認識します。 また、別のマシンなら特に問題はありません。 例えば以下のようなコード。 If WScript.Arguments.Count >= 1 Then WScript.Echo WScript.Arguments.Item(0) End If 何かファイルをドラッグアンドドロップしたり、 コマンドプロンプトから引数をつけて実行するとその引数が表示される だけのものですが、何も表示されません。 環境はWindowsXP SP2です。 WMIサービスを再起動してみたり、 WMIリポジトリの再構築を行ってみましたが変化はありません。 先週までは動いていたのですが、最近何か設定を変えたような記憶もありません…。 テストを別環境で行えば済むだけなのでそれほど困った状況では ないのですが、どうにも原因がわからずすっきりしないので よろしければどなたかご回答のほど、お願いいたします。

  • VBScriptでのDBのエラー取得

    VBScriptでADO(ADODB)接続により、SQLServer(2012)に接続して クエリを発行し、結果をファイルに出力するVBScriptを作成して います。 SQL実行時のエラーに対応する為、VBScriptにてエラーオブジェクトのプロパティ (Err.Number、Err.Description)を使用し、エラー番号と内容を取得しているの ですが、SQL Serverから発行しているエラー番号、エラー内容を取得したいので すが、取得できません。 どのようにすれば、データベース固有のエラーを取得ができますか。 是非ご教示いただきたく、 お手数をおかけ致しますが、宜しくお願い致します。 ------------------------------------------------- Option Explicit Dim objADO Dim objRS Dim Sql if WScript.Arguments.Count <> 1 then WScript.echo("usage: script.vbs arg1") WScript.Quit(-1) end if arg1 = WScript.Arguments(0) Set objADO = CreateObject("ADODB.Connection") objADO.Open "Provider=SQLOLEDB;" & _ "Data Source=hoge;" & _ "Initial Catalog=hoge;" & _ "Integrated Security=SSPI;" sql = "" sql = "select ~ where column ='"&arg1&"'" set objRS = objADO.Execute(sql) If Err.Number <> 0 Then objADO.Close Set objADO = Nothing WScript.Quit(-1) End If sql = "" sql = "update ~ ~ where column ='"&arg1&"'" objADO.Execute(sql) If Err.Number <> 0 Then 更新の破棄とエラー内容の表示 Else 更新を反映 End If objADO.Close Set objADO = Nothing

  • WSH

    実行時パラメータの扱いについてなんですが、 If WScript.Arguments.Item(0) = "/all" Then end if のようなif文を使用すると、パラメータに入力がないときは、 "Microsoft VBScript 実行時エラー: インデックスが有効範囲にありません。" というエラーがでてきます。 入力があるときは正常に動作します。 そこで、パラメータに入力があるか判断するif文を以下のようにつけたのですが、 If WScript.Arguments.Count = 1 Then     If WScript.Arguments.Item(0) = "/all" Then     end if else end if elseの処理に進んだとしてもエラーになってしまいます。 解決策はあるでしょうか? どなたかご存知の方がいらしましたらよろしくお願いします。

  • コマンドプロンプトの出力をVBScript内の変数に代入する

    VBScriptからコマンドプロンプトのver | findstr 5.1を実行し、その出力結果をVBScript内の変数に代入したいのですが、どうすればいいでしょうか? Dim WShell Dim result Set WShell = WScript.CreateObject("WScript.Shell") WShell.Run "cmd /c (ver | findstr XP > " & result & ")" MsgBox result とやってもresultには何も入っていませんでした。

  • VBScriptでEUC文字列をSJIS文字列に

    VBScript+WSHを使って、変数に入っているEUC-JP文字列をShift_JIS文字列に変換したいのですが、ウェブで情報を探しても、ファイルを扱う物ばかりです。 Set stream = CreateObject("ADODB.Stream") stream.Charset = "EUC-JP" stream.Open stream.WriteText = eucstring ' この変数にはEUC-JP で文字列が入ってる stream.Position = 0 stream.Charset = "Shift_JIS" WScript.Echo "(" & stream.ReadText & ")" とかやってみましたが、だめです。まさか「いったんファイルに書けば可能だが書かないと不可能」ということもないと思うのですが。。。。。 元のEUC-JP文字列は、xmlHTTPrequestでウェブサイトから得た物なので、その段階でShift_JISに変換する方法があるのならそれでも良いです。 よろしくお願いします。

専門家に質問してみよう