2

非表示のウィンドウでコマンド ファイルを起動するために、この VBScript を使用しています

また、ログの目的で、cmd の出力をファイルにリダイレクトしています。

私のVBScriptは基本的に次のとおりです。

Const HIDDEN_WINDOW = 12

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set objStartup = objWMIService.Get("Win32_ProcessStartup")

Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = HIDDEN_WINDOW
Set objProcess = GetObject("winmgmts:root\cimv2:Win32_Process")

errReturn = objProcess.Create("C:\Temp\test.cmd > C:\Temp\log.txt", null, objConfig, intProcessID)

コマンド ファイルは、プログラムをインストールしてから起動します。例として、メッセージを表示してからメモ帳を起動するとします。

echo whatever

start "" notepad.exe

VBScript を (wscript を使用するかダブルクリックして) 起動すると、コマンド ファイルが非表示のウィンドウで実行され、出力が log.txt に保存され、メモ帳が起動します。予想通り。

問題は、メモ帳を閉じるまで log.txt ファイルがロックされたままになることです (削除または変更することはできません)。コマンドを使用しているため、コマンドファイルはメモ帳プロセスが終了するのを待つべきではありませんstart。なぜこれが起こっているのか分かりますか?

編集:

スクリプトのはるかに短いバージョンである Bali C に感謝します。

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("C:\Temp\test.cmd > C:\Temp\log.txt"), 0, True

ただし、問題は同じです。

4

2 に答える 2

0

スクリプトが機能しない理由はわかりませんが、これははるかに短く、私にとっては機能します

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run("C:\Temp\test.cmd >C:\Temp\log.txt"), 0, True
于 2013-01-08T15:46:57.543 に答える
0

メモ帳を開始する行を除いて、バッチの各行をリダイレクトすることが唯一のオプションだと思います。

ECHO whatever>>log.txt

START "" notepad.exe

ECHO blah blah blah>>log.txt
于 2013-01-08T17:31:01.637 に答える