2023年08月19日

ウインドウ操作にじゃまにならないバッチファイル



Windowsである特定の時間にプログラムを起動するのに、タスクスケジューラを使用します。
私は、一定期間ごとにバックアップを取るプログラムを作っていますが、問題は作業中であろうが気にせず、このプログラムが時間通りに起動してくれること。

いや、その機能は正しい。全く持って正しい。でも作業中なのです。

そのプログラムが、デン! と居座って今やっている作業Windowが見えないではないか!

■start コマンド


アプリケーションを最小して起動する方法は簡単です。START コマンドを使います。
START コマンドの詳細な書式はこんな感じ。

  start ["title"] [/d ] [/i] [{/min | /max}] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | /belownormal}] [/node ] [/affinity ] [/wait] [/b] [/machine ] [ [... ] | [... ]]

ながい…

覚えておいて損がないのは、

  /min    最小化して起動する
  /max    最大化して起動する
  /wait    処理が終了するまで待つ

この3つくらい。


■タスクスケジューラでの cmd.exe start の挙動


start コマンドは、cmd.exe が実現しているので、タスクスケジューラで設定するには、タスクスケジューラの操作タブで、

  プログラム   : cmd.exe
  引数のオプション: /c START /min (目的のバッチファイル)

のように設定します。
※ /c は cmd.exe のパラメータで、引数の実行が完了したら、プログラムを終了するという意味。

こうしておくと、最小化起動してくれます。

だがしかし!

START は新たな cmd.exe を起動するため、この状態だとバッチファイルが終了したあと、コマンドプロンプトが開いたままになってしまうのです。

私の環境だと、バッチファイルの最後に exit (バッチが終了したら、cmd.exe も終了するようにするコマンド)と書いても、コマンドプロンプトが残り続けます。
ネットで色々調べてみたのですが、解決方法がわかりませんでした。

■バッチファイルで最小化起動をする


そこで、バッチファイルに以下のような工夫をしました。

 バッチファイルを起動したときに、最初の1回だけは、自分自身を最小化して呼び出す

意味わかります?

これは以下のようなバッチスクリプトで実現しています。

if "%1" == "1" (
    SHIFT
    START /min cmd.exe /c %~0 %*
    EXIT
)

これは第1パラメータが1であるときには、start コマンドで自分自身を最小化状態で起動し、自分自身は終了させてしまうようになっています。
これを、バッチファイルの戦闘に記述しておいてください。

これで、タスクスケジューラには、起動プログラムとして、バッチファイル名を直接記述し、パラメータとして 1 を最初に書いておいて、残りのパラメータを記述します。
たとえば、test.bat を起動するときには、操作タブの編集で、

 プログラム/スクリプト    : c:\test.bat
 引数の追加(オプション)   : 1 param1 param2

のように書いておきます。
※ここでは、バッチファイルは C:\ にあって、パラメータとして param1 と param2 を受け取るものとします。

これで、めでたく起動した瞬間に、バッチのウインドウは最小化されます。

■同じテーマの記事

ファイルの同期とバックアップ

…り続けます。 これをバッチファイルにしておいて、一区切りしたときと始業時にやってやれば、_v1 とか変なリネームをしなくても、かってにバックアップが残ります。 *1 これで、全くファイルの履歴を気にすることなく、_usr フォルダの下はファイルを編集しようが削除しようが、過去に使ったファイルはいつでも履歴を遡ることができるようになります。 ■FreeFileSyncを使った同期とバックアップ 自宅には5台のPCが稼働しています。常時起動しているのは3台だけですが、それぞれに同…

日本語入力で誤変換をなくすアイディア

…er_dialog バッチファイルでも同じことができます。 デスクトップに、ショートカットの作成で、以下のように書いておいて、それに適当なショートカットキーを割り当てるだけです。 "C:\Program Files (x86)\Google\Google Japanese Input\GoogleIMEJaTool.exe" --mode=word_register_dialog "\" は "¥” 記号です。適宜書き換えてください。 また、インストール方法によっては実行ファ…

ファイルの同期とバックアップ

…れらには別の意味を持たせているので、"_" を使ってます。このキーのほうがタイプしやすいという理由もあったりします。 ちなみに、@,#の意味は @ : バックアップ対象外(この下のフォルダは @Backup には残らない) # : 履歴対象外(この下のフォルダは、@Backup に最新ファイルだけが残る) という意味で使ってます。 *1: ※注記:始業時なのは、終業時にはとっとと帰りたいので、翌日PC起動時にStartupに入れているためです。正しくは作業終了時でしょうけど。

タスクマネージャでAutoHotKeyを有効にする方法

アプリ …mend="on";rakuten_ts="1662864824574"; 最上位の特権で実行 AutoHotKey は、普通、STARTUPフォルダにショートカットキーを置いて起動していますよね。これを、タスクマネージャで「ログオン時に実行」するようにして、プロパティで、以下図のように、「最上位の特権で実行する」にチェックを入れるだけ。 これで完成。 あとは再起動してやれば終了。 システムツールでも、AutoHotKey が利用可能になります。 長年の問題が解決した〜〜。

posted by 管理人 at 13:11| Comment(0) | TrackBack(0) | PCアプリ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック