申し訳ありませんが、私はフォーラムやGoogleでこのスクリプトを書こうと数時間を費やしましたが、私はあまりにも多くの悩みやフランケンシュタインのコードに異常があると思います。VBScript CMDプロンプトと非同期で対話する
私は実行しようとしており、他のファイルをスキャンしてフィードバックとプロンプトを表示する実行可能ファイルです。手動でコマンドプロンプトでこれを実行し、最初のスキャンを行い、何をしたいかを尋ね、修復を実行して(5分以上かかることがある)、再度実行するか閉じるように促します。
擬似コードは次のようになります。
- 実行EXE ArchiveFileのConfigFile ため
- 待ち "のコマンドを入力します。>" のための
- タイプ1
- 待ち "のコマンドを入力します。>"
- タイプ7
- "印刷先を入力してください"を待ちます
- タイプ2
- 待ちここ
を完了 "コマンドを入力します>"
'Cycle through each iha file in the chosen folder
for each objFile in objFSO.GetFolder(archiveFolder).files
If LCase(objFSO.GetExtensionName(objFile.Name)) = "iha" Then
'run the iharchiveInfo.exe with the chosen config and the current archive
msgbox(chr(34) & exeFile & chr(34) & " " & chr(34) & objfile.path & chr(34) & " " & chr(34) & ArchiveConfig & chr(34))
set oExec = Shell.exec("cmd.exe /k "& chr(34) & exeFile & " " & chr(34) & objfile.path & chr(34) & " " & chr(34) & ArchiveConfig)
do while Not oExec.StdOut.AtEndOfStream
MsgBox oExec.stdout.Readline
Loop
Msgbox("second line")
oExec.stdin.write chr(34) & exeFile & " " & chr(34) & objfile.path & chr(34) & " " & chr(34) & ArchiveConfig
Do While oExec.Status = 0
WScript.Sleep 100
WScript.StdOut.Write(oExec.StdOut.ReadAll())
WScript.StdErr.Write(oExec.StdErr.ReadAll())
Loop
msgbox ("write")
oExec.stdin.write 1
do while Not oExec.StdOut.AtEndOfStream
MsgBox oExec.stdOut.Readline
Loop
oExec.stdin.write 7
exit for
end if
next
であるためにそれはプロンプトcmdを開きますが、私はとのメッセージボックスを取得することはありません読み込まれた行。代わりに、私がcmdプロンプトを閉じると、次にmsgboxの書き込みを取得します。
コマンドプロンプトでは、cscript.exeを使用して、コマンドプロンプト以外のプロンプトwscript.exeではなく、vbscriptsを実行します。 Wscriptは、vbsスクリプトのデフォルトプログラムです。ですから、 'cscript // nologo" c:\ script.vbs "'を指定する必要があります。ヘルプは 'cscript /?'を参照してください。 –
私はwscript atmを使用しています。私はその違いによってちょっと混乱していて、どちらが適切であるか自分自身と議論してきました。この例ではwscriptを使用し、cscriptとwscriptでしか動作しないと言うmsdnサイトではもっと混乱します。 https://msdn.microsoft.com/en-us/library/skwz6sz4(v=vs.84).aspx – Furbs
Cscriptはコンソールプログラムです。 WscriptはGUIプログラムです。コンソールプログラムは自動的にコンソールを取得します。 –