4

これが私の状況です:

  • 実行に時間がかかる(1分から70分)BATファイルがあります
  • Windowsスケジューラで10分ごとに実行するようにスケジュールします
  • 実行中に再度スケジュールを設定しても、何も起こりません(これは良いことです)

私の問題は、BATをサイレントに実行する必要があることですが、そうではありません。だから、私は次のようなWindowsスクリプトでそれを起動したいと思います:

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & "C:\Batch Files\syncfiles.bat" & Chr(34), 0
Set WshShell = Nothing

残念ながら、このスクリプトをスケジュールすると、ジョブは実行されますがすぐに戻ります。これにより、Windowsスケジューラは、実際にはBATがどこかで単独で実行されているときにタスクが終了したと見なします。

このため、Windowsは10分後にジョブを再度スケジュールし、複数回実行します。

必要なもの:

進行/終了する前に.Runコマンドのターゲットが完了するのを待つようにWindowsスクリプトファイルに指示する方法はありますか?基本的に、別のスレッドを起動してからそのスレッドでjoinを呼び出したように動作させたいので、BATと同じように動作しますが、コンソールウィンドウは表示されません。

その他のソリューション

このBATをサイレントに実行する他の方法(PowerShellコマンドなど)を教えてください。ソリューションとしても受け入れます。その周りのC++/ C#アプリケーションについて完全に書くように私に言わないでください、それはやり過ぎです:)


実行中: Windows Server 2008 R2

4

2 に答える 2

6

オプションの3番目の引数に必要なのはTRUEだけだと思います

WshShell.Run chr(34) & "C:\Batch Files\syncfiles.bat" & Chr(34), 0, TRUE
于 2012-07-25T22:58:31.643 に答える
4

ここに狂気が行きます...

ファイルを作成しますinvisible.vbs

CreateObject("Wscript.Shell").Run """" & WScript.Arguments(0) & """", 0, True

次に、タスクスケジューラで、次のようにスクリプトを呼び出します。

wscript.exe "C:\Batch Files\invisible.vbs" "C:\Batch Files\syncfiles.bat"

私はそれをテストしましたが、これは実際に機能します。コマンドウィンドウはなく、バッチスクリプトが終了するまでタスクは実行されていると見なされます。

クレジットはhttps://superuser.com/a/62646/40362に移動します。


2008 R2の場合、invisible.vbsにこのコンテンツを含め、直接実行します。BATをサイレントに実行し、完了を待ちます。

Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "D:\IUpdateScript.bat", 0, true
于 2012-07-25T23:20:29.293 に答える