このブログのはてなブックマーク数 このエントリーをはてなブックマークに追加

知らなきゃ絶対損するPCマル秘ワザ

知らなきゃ損するPC情報を分かりやすくメモする個人ブログ。
『月,水,金』の週3回更新!(予定)

このブログ内をキーワードで検索することもできます。
Loading



最新記事
  • 内蔵HDDのクローン,外付け化ができるスタンドを買ってみた (08/18)
  • ノートPC Lenovo G570 のヒンジが壊れたので100円で修理した (08/16)
  • エクセル:カーソルが吹っ飛ぶ「Ctrl+矢印」キーを味方につける (08/14)
  • Windows:「スタート」ボタンが無反応なので小技でシャットダウン (08/09)
  • steelseries:アメリカから交換用のキーキャップを送ってくれた話 (08/07)
  • 管理人より
    2200万アクセス突破しました。ありがとうございます。

    Windows:バッチファイルの書き方忘れそうだから備忘録を書くよ

    このエントリーをはてなブックマークに追加
    操作画面


    こんにちは、さち です。

    以前、「バッチファイル」を自作した時にコマンドプロンプトの勉強をしたんですが
    使用機会があまりなく、記憶がゆっくりと頭から抜けてしまいそうです……。

    拙いながらせっかく勉強したので
    今回は、Windows のコマンドプロンプトで使用できる
    「バッチファイル」の記述方法ついて備忘録を残しておきたいと思います。




    そもそも「バッチファイル」とは?

    バッチファイルとは、簡単に言うと Windows の作業を自動で行うための指示書です。
    Windows はバッチファイルに書かれている指示のとおりに動いてくれます。
    (例えば、「エクスプローラーを終了しろ」と指示すればそのとおりになります)

    つまり、バッチファイルは
    決まりきった面倒な作業を省く(サボる)ための手段です。

    バッチファイルで使用するコマンドを勉強しなくてはいけませんが
    楽をするための努力は必要ということで前向きに行きましょう。




    まえおき

    現在は、「Windows PowerShell」 の方ができることが多いようですが
    Windows 7 以降ではないと標準搭載されていないということから
    現在稼働しているほぼすべての Windows PC で動くであろう
    「コマンドプロンプト」を使うことにしました。

    あくまで備忘録ですので
    ここで解説するコマンド等は実際に私が使ったものだけです。
    つまり、全然網羅していません。
    コマンドについてちゃんと勉強したい人は他サイトも読んで下さいね。




    コメントを書く

    rem コメント

    行頭に rem と書くと、その行はコメントとして扱われます。
    (何の意味も持たない単なるメモと見なされる)

    3文字もアルファベットを書くのは面倒だという場合は
    :(コロン) で同じことができなくはないですが
    本来は「ラベル(※後述)」として使うものなので多用するのは微妙です。




    メッセージの表示

    rem メッセージを表示
    echo メッセージ

    rem 空白のメッセージを表示
    echo.

    行頭に echo と記述すると、その行をメッセージとして表示します。

    ただし、空白のメッセージ(空白の行)を表示するには
    単に echo と記述するだけではダメで echo. とピリオドが必要。
    (echo とピリオドの間にはスペースは入れない)




    サービスの開始/停止

    rem サービを開始
    net start サービス名

    rem サービスを停止
    net stop サービス名

    サービス名の確認は「サービス(管理ツール)」で行います。
    (「サービス」の起動は、「Windows + R」キー→「services.msc」と入力)
    目的のサービス上で「右クリック」→「プロパティ」と進み
    表示された「サービス名」を使用します。

    Windows 8 以降の場合は
    「タスクマネージャー(Ctrl + Shift + Esc)」にある「サービス」タブであれば
    表示されている名前がそのまま「サービス名」です。




    プロセス(アプリ)の起動/終了

    rem プロセス(アプリ)を起動
    start プロセス名

    rem プロセスを終了(未保存時のダイアログあり)
    taskkill /IM プロセス名

    rem プロセスを強制終了(未保存時のダイアログなし)
    taskkill /F /IM プロセス名

    rem プロセス(親)と、その子プロセスを強制終了
    taskkill /T /F /IM プロセス名

    プロセス名は、「xxxxx.exe」の形で記述します。
    終了は、起動中のプロセス(アプリ)名「xxxxx.exe」の記述のみでOKですが
    起動は、Windows 標準のプロセス(explorer.exe)など以外は
    「C:\Program Files\xxxxx\xxxxx.exe」のようなパスで記述しないと起動できません。

    例えば、エクスプローラー(explorer.exe)を強制終了する場合はこんな感じ。
    taskkill /F /IM explorer.exe




    変数を使う

    rem 変数の作成(定義)
    set 変数名 = 変数に入れる値

    rem 変数の中身を表示
    echo %変数名%

    set の後に任意の変数名を記述
    続いて、= の後にその変数に入れる値を記述します。
    変数の中身を表示する時は変数名を % で囲みます。

    変数の作成(定義)の例は下記のとおり。
    rem 「おはよしこ」を値に持つ変数「message」を作成
    set message = おはよしこ

    rem 変数「message」の中身(おはよしこ)を表示
    echo %message%




    条件別に処理を分岐

    rem 条件を満たす時だけ処理を実行
    if 条件 ( 処理 )

    rem 条件を満たせば処理1、それ以外は処理2を実行
    if 条件 (
    処理1
    ) else (
    処理2
    )

    rem 条件1を満たせば処理1、条件2を満たせば処理2、それ以外は処理3を実行
    if 条件1 (
    処理1
    ) else if 条件2 (
    処理2
    ) else (
    処理3
    )

    if else は何個でも続けることができます。
    最後の else 以降の記述は無くても構いません。

    条件を記述する際、例えば「AとBが一致」などのように
    2つの値を比較する場合は演算子を使います。
    rem AとBが一致するとき、処理を実行
    if %A% == %B% ( 処理 )

    rem AとBが一致するとき、処理を実行(大文字/小文字の区別なし)
    if /i %A% == %B% ( 処理 )

    rem AとBが一致しないとき、処理を実行
    if not %A% == %B% ( 処理 )

    数値の場合、「等しい」以外に「大きい」「小さい」という比較もありえます。
    その場合は、下記のような演算子を使います。
    ただし、前述の not は下記と組み合わせて使うことはできません。
    rem A=B(AとBが等しい)のとき、処理を実行
    if %A% equ %B% ( 処理 )

    rem A≠B(AとBが等しくない)のとき、処理を実行
    if %A% neq %B% ( 処理 )

    rem A≧B(AがB以上)のとき、処理を実行
    if %A% geq %B% ( 処理 )

    rem A>B(AがBより大きい)のとき、処理を実行
    if %A% gtr %B% ( 処理 )

    rem A≦B(AがB以下)のとき、処理を実行
    if %A% leq %B% ( 処理 )

    rem A<B(AがB未満)のとき、処理を実行
    if %A% lss %B% ( 処理 )

    例えば、変数「message」の中身が「おはよしこ」なら「だからヨハネよ!」と表示し
    それ以外なら「ギラン!」と表示するならこんな感じ。
    if %message% == おはよしこ (
    echo だからヨハネよ!
    ) else (
    echo ギラン!
    )




    一時停止,停止など

    rem 何かキーを入力するまで一時停止
    pause

    rem 指定した秒数だけ一時停止(キー入力で一時停止を中断)
    timeout 秒数

    rem コマンド入力を受け付ける状態で停止
    cmd /k

    rem バッチファイルを終了
    exit

    timeout は Windows Vista 以降で標準使用できます。
    timeout の秒数を「-1」にすると無期限に一時停止します。
    また、秒数の後に /nobreak を記述するとキー入力を無視します。




    ラベルを使って別の行にジャンプする

    rem ジャンプ先を指定
    goto jump

    rem ジャンプの着地点の指定
    :jump

    例えば、下記のようなバッチファイルの場合
    変数「message」の中身が「おはヨハネ」なら3行目の :ok にジャンプして終了。
    それ以外なら「だからヨハネよ!」を表示してから3行目以降に進んで終了します。
    if %message% == おはヨハネ ( goto ok )
    echo だからヨハネよ!
    :ok
    exit




    コマンドの非表示

    rem その行だけ非表示
    @コマンド

    rem その行以降すべて非表示
    @echo off

    rem その行以降すべて表示
    @echo on

    コマンドプロンプトでは記述したコマンドが実行時に表示されます。
    非表示にするにはそれ用の記述が必要です。

    特定の行のみ非表示にするには
    行頭に @ を付け、その後ろは普通にコマンドを記述すればOK。

    その行以降すべてのコマンドを非表示にするには
    @echo off を記述して、次の行から普通にコマンドを記述します。
    (つまり、最初の行に記述すればすべてのコマンドが非表示になる)




    標準出力,エラー出力を表示しない

    そもそも「標準出力」「エラー出力」って何?という話ですね。

    簡単に言うと
    「標準出力」は、コマンドを正常に処理した時に表示されるメッセージ。
    「エラー出力」は、正常に処理できなかった時に表示されるメッセージです。

    コマンドが実行されたときの出力が鬱陶しいという場合は
    その行の末尾に下記記述を足すことでそのコマンドの出力を非表示にできます。
    rem エラー出力だけ非表示
    コマンド 2>NUL

    rem 標準出力,エラー出力 両方を非表示
    コマンド >NUL 2>&1

    1」が標準出力、「2」がエラー出力をあらわしています。

    例えば、2>NUL はエラー出力を NUL(空のファイル) に表示するということ。
    つまり、エラー出力は破棄されるため表示されません。

    そして、>NUL 2>&1
    前半の >NUL が標準出力を NUL(空のファイル) に表示するという意味
    後半の 2>&1 がエラー出力を標準出力と同じ場所に表示するという意味
    つまり、標準出力,エラー出力 両方とも破棄されるため表示されません。

    ちなみに、NUL の代わりに実在するテキストファイルを指定すれば
    出力をそのテキストファイルに書き込ませることができます。

    実際の使用例はこんな感じ。
    rem 正常にEdgeを強制終了した場合は標準出力が表示されるが
    rem Edgeが存在しない場合のエラー出力は表示されない
    taskkill /F /IM MicrosoftEdge.exe 2>NUL

    rem timeout(5秒)に関する出力は何も表示されない
    timeout 5 >NUL 2>&1





    エスケープが必要な(そのままでは使えない)文字

    特別な意味を持つ文字は、単体で文字として表示することができません。
    文字の前に ^(サーカムフレックス) を付ける必要があります。
    この作業(エスケープ)が必要なのは下記の文字です。
    ^&
    ^|
    ^<
    ^>
    ^%
    ^^




    その他

    「管理者として実行」しないと
    バッチファイルが正常に動かない場合があるため、それを確認するコマンドです。
    openfiles >NUL 2>&1

    if errorlevel 1 (
    echo 管理者として実行されていません
    cmd /k
    exit
    )

    echo 管理者として実行されています

    「openfiles」はファイルの情報を開くためのコマンドです。
    このコマンドは管理者権限がないと動作せず
    その状態が「errorlevel」の値として返ってきます。

    errorlevel の値は
    「管理者として実行」されている場合は「0」
    されていない場合は「1」になります。

    if errorlevel 1」は「errorlevel が1以上の場合」という意味。
    「errorlevel が1の場合」ではありません。注意して下さい。
    if %errorlevel% geq 1」と書くのと同じ効果です。




    【参考サイト様】

       → Windowsコマンド集(機能別一覧) - ITpro
       → DOS コマンド一覧 - Programming Field









    このエントリーをはてなブックマークに追加




    管理人だけが読めるコメントにする(返信はしません)
    【お知らせ】
    • コメントは承認制です。反映に時間がかかります。
    • Yahoo!BBはスパムコメントが多いため一部規制中です。
    • URLを含む投稿はできません。必要な場合は最初のhを削って下さい。
    • 記事に直接関係ない個人のトラブルにはお答えできません。
    • Android は使ったことがないので質問を頂いても答えられません。
    • その他詳細はこちら





    記事別の週間アクセス数ランキングです。こちらの記事もぜひ読んでみて下さい。

    2008-2017 知らなきゃ絶対損するPCマル秘ワザ  無断転載禁止

    ブログパーツ