robocopy
を毎時間実行するバッチスクリプトを開始するスケジュールされたタスクがあります。それが実行されるたびに、私は本当に見たくないrobocopyの出力を含むウィンドウがデスクトップにポップアップします。
スケジュールされたジョブを実行することにより、ウィンドウを最小化して表示することができました
cmd /c start /min mybat.bat
しかし、それによって毎時間新しいコマンドウィンドウが表示されます。 cmd /c
「文字列で指定されたコマンドを実行してから終了する」とすると、これには驚きました-ドキュメントを誤解していたに違いありません。
コマンドウィンドウをポップアップせずにバッチスクリプトを実行する方法はありますか?
代わりに、Windowsスクリプトファイルを使用してサイレントで実行できます。 Runメソッドを使用すると、非表示モードでスクリプトを実行できます。 .vbs
このようなファイル
Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing
それをスケジュールします。この例の2番目の引数は、ウィンドウスタイルを設定します。 0は「ウィンドウを隠す」ことを意味します。
メソッドの実行 の完全な構文:
object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])
引数:
これをスケジュールされたタスクとして実行していますか?その場合、別のユーザーアカウントとして実行するように設定すると、ログオンしているユーザーには表示されません。スクリプトがWindows認証を必要とするアイテム(ファイル共有やプリンターなど)へのネットワークアクセスを必要としない場合は、「ntauthority\system」として実行し、パスワードを空白のままにすることができます。 Windows 7では、ユーザーをSYSTEMに設定し、OKを押します。
(robocopyを使用している場合は、おそらく実際のユーザーを使用する必要があります...)
JR
スケジュールされたタスクを「ユーザーがログオンしているかどうかにかかわらず実行する」に設定するだけです。
CHP(隠しプロセスの作成) を試してみることもできます。
CHP.EXE mybat.bat
コマンドウィンドウなしで実行します。パーフェクト! CMDOWと同じ人々によって作成されましたが、これはより適切です。
[〜#〜] cmdow [〜#〜] は、コマンドラインからウィンドウに対して多くのことを実行できる、便利なツールです。
最も簡単なことの1つは、現在のウィンドウを(通常、batファイルの最初の行として)非表示にすることです。
cmdow @ /hid
またはで新しい隠しプロセスを開始します
cmdow /run /hid mybat.bat
スクリプトを呼び出してみてください
start /b <command>
バッチファイルへのショートカットを作成し、ショートカットを最小化して開始するように設定し(ショートカットのプロパティの[ショートカット]タブで)、ショートカットを開始するようにジョブを設定できます。
重要:[実行]テキストフィールドにショートカットのパスを手動で入力し、拡張子「.lnk」を付けて指定する必要があります。単に参照しようとすると、役立つショートカットが指すものにリダイレクトされます。
この質問は、Windowsにネイティブで完全に適切な解像度で既に回答されているため、最も互換性があるはずであり、完全に同意します。
また、@ splattneのコメントには同意しませんが(実際の回答ではありません)、他の参照されているスレッドでの解決策は信用に値します。その答えには、別のユーザー(SYSTEM)としてスクリプトを実行することが含まれます。これは、スクリプトにルートアクセス権を与えることとほぼ同じです。また、ROBOCOPY
(John Rennieが参照)などのネットワークアクセスを必要とするジョブの場合も失敗します。
これまでにCMDOW
を試したことはありませんが、他の同様の解決策を提供したいと思います。[Windowsにはネイティブインストールされていません]は、ほとんどのバージョンに移植性が高く、32ビットバージョンと64ビットバージョンの両方があり、は NirCmd です。
NirCmdは無数のオプションを備えた非常に強力なツールであり、その中で最も有用なものは、次のコマンドを実行するだけで非表示のコマンドウィンドウを起動できることです。
c:\path\to\nircmd.exe exec hide "c:\path\to\mybat.bat"
The NirCmd Command Reference のexec
セクションから:
exec [show/hide/min/max] [application + command-line]
アプリケーションを実行し、オプションで、実行されたアプリケーションの1つ以上のコマンドラインパラメータを指定します。 [show /hide/ min/max]パラメーターは、実行中のアプリケーションを表示するかどうかを指定します。 'hide'を指定すると、実行中のアプリケーションはユーザーに表示されません。 'max'を指定すると、実行中のアプリケーションウィンドウが最大化されます。 「min」を指定すると、実行中のアプリケーションウィンドウが最小化されます。
EDIT:ROBOCOPY
ジョブを実行しようとしてこの回答でメソッドを試しましたが、ネットワークアクセス権限を編集した後でも機能しませんでした。スクリプトをダブルクリックしてみましたが、機能しませんでしたが、昇格されたコマンドプロンプトで実行することしかできませんでした。私はバッチファイルへのショートカットを作成し、それを管理者として実行させ、ダブルクリックして実行させることができましたが、最終的にはSYSTEMとして非表示で実行することでした(わかっています、わかっています) -しかし、バッチファイルに適切な権限がある限り、ROBOCOPY
で機能します。
EDIT 2:なんらかの理由でSYSTEM(おそらく先に参照したネットワークアクセスのこと)として機能しません-実際にROBOCOPY
を実行した後、これに気付きました/ Lフラグなし。これは基本的に単なるシミュレーションであり、[見かけ上]実際にはリモートシステムに接続していませんが、最高の権限でバッチファイルを実行し、非表示のボックスをチェックすると、それを次のように実行できます。これは誰にとっても価値があるもののために、コマンドウィンドウを表示せずにバックグラウンドでログインしているユーザー。
私が使用した別のソリューションは Hidden Start です。