ウィンドウなしでスケジュールされたタスクで.batファイルを実行する


143

1 robocopy時間ごとに実行されるバッチスクリプトを開始するスケジュールされたタスクがあります。実行するたびに、robocopyの出力を含むウィンドウがデスクトップにポップアップ表示されますが、これはあまり見たくありません。

スケジュールされたジョブを実行することにより、ウィンドウを最小化して表示することができました

cmd /c start /min mybat.bat

しかし、それにより1時間ごとに新しいコマンドウィンドウが表示されます。cmd /c「stringで指定されたコマンドを実行して終了する」ことを考えると、私はこれに驚きました-ドキュメントを誤解していたに違いありません。

cmdウィンドウをポップアップせずにバッチスクリプトを実行する方法はありますか?


私はこの1つに、より好ましい解答たstackoverflow.com/questions/6568736/...
Efekt

回答:


144

代わりに、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は「ウィンドウを隠す」ことを意味します。

Runメソッドの完全な構文:

 object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

引数:

  • オブジェクト:WshShellオブジェクト。
  • strCommand:実行するコマンドラインを示す文字列値。実行可能ファイルに渡すパラメーターを含める必要があります。
  • intWindowStyle:オプション。プログラムのウィンドウの外観を示す整数値。すべてのプログラムがこの情報を使用するわけではないことに注意してください。
  • bWaitOnReturn:オプション。スクリプトの次のステートメントに進む前に、プログラムの実行が完了するまでスクリプトが待機するかどうかを示すブール値。trueに設定すると、プログラムが終了するまでスクリプトの実行が停止し、Runはプログラムから返されたエラーコードを返します。false(デフォルト)に設定すると、Runメソッドはプログラムの起動直後に戻り、自動的に0を返します(エラーコードとして解釈されません)。

1、ちょうどまったく同じことを書いた
サム・コーガン

削除する前に見ました。私たちは両方ボットだと思います。;-)
スプラット

1
ユーザー名、私は正直にサムは私よりもはるかに値すると思います。とにかくありがとう!そして、私とジョン・スキートを同じ文で言及しないでください。それは冒blです!;-)
splattne

3
「cmdウィンドウを表示せずにバッチスクリプトを実行する方法はありますか?」という質問には、非常に直接的な答えがあります。Windowsスクリプトファイルを使用して実行します。
マークメーアー

2
@Leeパスにスペースが含まれる場合、二重引用符が必要だと思います。
飛び散る

58

これをスケジュールされたタスクとして実行していますか?その場合、別のユーザーアカウントとして実行するように設定すると、ログオンしているユーザーには表示されません。スクリプトが、Windows認証を必要とするアイテム(ファイル共有やプリンターなど)へのネットワークアクセスを必要としない場合、「nt authority \ system」として実行し、パスワードを空白のままにすることができます。Windows 7では、ユーザーをSYSTEMに設定し、[OK]を押します。

(robocopyを使用している場合でも、おそらく実際のユーザーを使用する必要があります...)

JR


3
おかげで-これは、.vbsオプションよりも面倒なものではなくなりました。
マッケニル

8
「実行」ユーザーをSYSTEMに設定し(後にNT AUTHORITY \ SYSTEMに変更されました)、それは私のために機能しました。スケジュールされたタスクの実行時にポップアップCMDウィンドウが表示されなくなりました。ありがとう!
ライアンスティル

1
+1、これはエレガントです。ユーザー名として「system」を入力してください。そうすれば、win7が残りの作業を行います。ネットワーク共有やWindows認証が必要なものだけではなく、インターネットへのネットワークアクセスを取得することに注意してください。
サムスミス

1
システムユーザーはシンプルでエレガント、素晴らしいTIPです!+1!
マッテオコンタ

1
最小特権管理モデルの実装を参照してください。このためのシステムアカウントの使用は、最小特権ポリシーの違反ですか?その場合、管理者はほとんどの状況でこれを行わないようにする必要があります。
user34660

29

「ユーザーがログオンしているかどうかに関係なく実行する」として、スケジュールされたタスクを設定するだけです。


6
パーフェクト!資格情報ストレージを無効にすることもできます。これにより、SYSTEMで実行するよりも安全になります。
ビンキ

17

また、CHP(非表示プロセスの作成)を試すこともできます。

CHP.EXE mybat.bat

コマンドウィンドウなしで実行します。パーフェクト!CMDOWと同じ人が作成しましたが、これがより適切です。


ログインしたユーザーのコンテキストでタスクを実行する必要がある場合に完全に機能します(「トリガー:ユーザーセッションへの接続時」、「タスクの実行:ユーザー」)
Sergei

1
これは組み込みのツールではありません
-JonnyRaa

9

CMDOWは、コマンドラインから多くの多くのことをウィンドウに実行できるようにする素晴らしいツールです。

最も簡単なことの1つは、現在のウィンドウを非表示にすることです(通常、batファイルの最初の行として)。

cmdow @ /hid

またはで新しい非表示プロセスを開始します

cmdow /run /hid mybat.bat 

4
この提案とRocketmonkeyの提案には、新しいツールのダウンロードが含まれているため、さまざまな人々のデスクトップとの互換性が向上しています。Windowsコマンドを使用したベイクインの方がはるかに優れています。
-IanVaughan

さらに、一部のアンチウイルスプログラムによってcmdowが「危険」として検出されます(危険ではありませんが、cmdowファイルが検疫された場合、検出自体が問題を引き起こす可能性があります...)。
オティエル

3
まだポップアップコンソールがあり、非常に速く点滅するだけです。
竹14

5

でスクリプトを呼び出してみてください

start /b <command>

1
これは機能しません。スケジュールされたタスク->ステータスは「開始できませんでした」と表示され、次のようになります。 file.bat:正常に動作します。
-IanVaughan

1
startプログラムではないため、コマンドです。cmd実行するプログラムおよび/c start /b <file>引数として指定する必要があります。ただし、cmd画面の黒いウィンドウをフラッシュするためのコンソールウィンドウを作成するため、これはまだ機能しません。
Synetech

1
また、@ Synetechで、これにより新しいウィンドウが作成されないことを確認できますが、それを開始するにはコンソールウィンドウを開く必要があります。これは確かに便利なコマンドですが、スケジュールされたタスクで要求されたとおりに使用することはできません。
JonathanDavidArndt

5

バッチファイルへのショートカットを作成し、ショートカットを最小化して起動するように設定し(ショートカットのプロパティ、[ショートカット]タブで)、ジョブを設定してショートカットを起動できます。

重要:「.lnk」拡張子を付けて「Run」テキストフィールドに入力して、ショートカットへのパスを手動で指定する必要があります。単にブラウズしようとすると、ショートカットが指すものリダイレクトされます。


これはWindows 10 x64では機能せず、「このファイルをどのように開きますか?」というポップアップが表示されます。

1

この質問は、Windowsにネイティブで完全に良好な解像度で既に回答されているため、最も互換性があるはずであり、完全に同意します。

また、@ splattneのコメント(実際の答えではありません)に同意しないことも言いたかったのです。他の参照されたスレッドの解決に値するものです。その答えには、別のユーザー(SYSTEM)としてスクリプトを実行することが含まれます。これは、スクリプトのルートアクセス権を与えるのとほとんど同じです。またROBOCOPY、ネットワークアクセスを必要とする(John Rennieが参照)などのジョブでも失敗します。

私はCMDOW以前に試したことはありませんが、別の同様の解像度を提供したいと思います。[Windowsにネイティブにインストールされていません]は、ほとんどのバージョンにまだ移植性が高く、NirCmd

NirCmdは無数のオプションを備えた非常に強力なツールです。その中で最も便利なのは、次のコマンドを実行するだけで非表示のコマンドウィンドウを起動できることです。

c:\path\to\nircmd.exe exec hide "c:\path\to\mybat.bat"

NirCmdコマンドリファレンスのexecセクションから:

exec [show/hide/min/max] [application + command-line]

アプリケーションを実行し、オプションで実行されたアプリケーションの1つ以上のコマンドラインパラメーターを指定します。[show / hide / min / max]パラメーターは、実行中のアプリケーションを表示するかどうかを指定します。「非表示」が指定されている場合、実行中のアプリケーションはユーザーに表示されません。「max」を指定すると、実行中のアプリケーションウィンドウが最大化されます。「min」を指定すると、実行中のアプリケーションウィンドウが最小化されます。

編集: 私はROBOCOPYジョブを実行しようとして、この回答の方法を試しましたが、ネットワークアクセス権限を編集した後でも機能しませんでした。スクリプトをダブルクリックしようとしましたが、動作させることができませんでしたが、昇格したコマンドプロンプトでのみ実行することができました。バッチファイルへのショートカットを作成し、それを管理者として実行し、ダブルクリックして実行できるようにしましたが、最終的にはSYSTEMとして非表示で実行する方法でした(わかっています) -しかしROBOCOPY、バッチファイルに適切な権限がある限り、それは価値がありますが、で動作します。

編集2: 何らかの理由で、それはSYSTEMとして機能しません(おそらく以前に参照されたネットワークアクセスのもの)- ROBOCOPY/ Lフラグなしで実際に実行した後にのみこれに気付きました。これは基本的に単なるシミュレーションであり、[明らかに]はありません実際にリモートシステムに接続しますが、最高の権限でバッチファイルを実行し、非表示のボックスをオンにすると、コマンドウィンドウが表示されることなく、ログインユーザーとしてバックグラウンドで実行できます。 。




-2

(ウィンドウではないが)出力を非表示にするには、これをバッチファイルの先頭に追加します。

@echo off
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.