0

私はこのバッチファイルを持っています:

@echo off
echo StrText="Application created Successfully" > spk.vbs
echo set ObjVoice=CreateObject("SAPI.SpVoice") >> spk.vbs
echo ObjVoice.Speak StrText >> spk.vbs
start spk.vbs

このバッチ ファイルは、同じディレクトリに spk.vbs を作成し、コンピューターの音声で「アプリケーションが正常に作成されました」というテキストを出力します。

ここで、コマンド ライン (%1) で指定されたテキスト ファイルの内容をバッチ ファイルに読み上げてもらいたいと考えています。また、代わりに、既定の Windows 一時ディレクトリに spk.vbs ファイルを作成する必要があります。これどうやってするの?

***編集 06.11.2012 20:24

その間、バッチ ファイル スクリプトを使用して vbs スクリプト ファイルを生成するという考えを破棄し、vbs スクリプトを直接使用したいと考えています。私はVBSの初心者ですが、これを作成しました:

Set objFSO = CreateObject("Scripting.FileSystemObject")
strAFile = Wscript.Arguments(0)
Set objFile = objFSO.GetFile(strAFile)
If objFile.Size > 0 Then
  Set objReadFile = objFSO.OpenTextFile(Wscript.Arguments(0), 1)
  strContents = objReadFile.ReadAll 
  objReadFile.Close
  set ObjVoice=CreateObject("SAPI.SpVoice") 
  ObjVoice.Speak strContents 
Else
  Wscript.Echo "The file is empty."
End If

それは機能しますが、おそらく私は多くの間違いを犯しました。vbs スクリプトを最適化する方法を誰か教えてもらえますか? ありがとうございました!

***編集 06.11.2012 22:19

これが数回機能した後、現在は機能しなくなりました。現在、コンピューターのスピーカーは「Y」とテキストファイルの最初の文字のみを出力しています! これは私のスクリプトのエラーと関係がありますか?

***編集 2012 年 10 月 11 日 19:32 バグが見つかりました: 上記のスクリプトは、ANSI コードのテキスト ファイルでのみ機能します。UNICODE テキスト ファイルでは機能しません。なんで?UNICODEテキストファイルでも動作させるにはどうすればよいですか?

4

1 に答える 1

1

.OpenTextFile (または .OpenAsTextStream の 2 番目のパラメーター)メソッドの 4 番目のパラメーターを使用して、ファイルを ASCII または Unicode (16) のどちらで開くかを指定します。

あなたのコード スニペットには重大な間違いは見当たりませんが、次のことを考慮してください。

  1. 「Option Explicit」を使用する (明示的に)
  2. ユーザーが少なくとも 1 つの引数をスクリプトに渡したかどうかを確認する
  3. 異なる名前/変数 (strAFile、WScript.Arguments(0)) を介して同じ「オブジェクト」を参照しないようにする
  4. File オブジェクトが既にあるため、.OpenAsTextStream を使用する
  5. 適切な定数 (ForReading など) を定義して「マジック ナンバー」 (1 など) を回避する
  6. 不必要な変数を避ける (あなたが書かないコードが間違っているはずがない)

例えば:

Set objReadFile = objFSO.OpenTextFile(WScript.Arguments(0), 1)
strContents = objReadFile.ReadAll 
objReadFile.Close

==>

Const cnUnicode = -1
...
strContents = objFile.OpenAsTextStream(ForReading, cnUnicode).ReadAll()
于 2012-11-11T10:40:52.043 に答える