Batch-script-quick-guide
バッチスクリプト-概要
バッチスクリプトは、本質的に反復的なコマンドシーケンスを自動化するために組み込まれています。 スクリプトは、シェルでの生活をより簡単に、より生産的にするために、これらのコマンドシーケンスを自動化することにより、この必要性を軽減する方法です。 ほとんどの組織では、バッチスクリプトは何らかの方法で組み込まれて、自動化されています。
バッチスクリプトの機能のいくつかは次のとおりです-
- さらに処理できるように、ユーザーからの入力を読み取ることができます。
- for、if、whileなどの制御構造があり、自動化とスクリプト作成を改善します。
- 関数や配列などの高度な機能をサポートします。
- 正規表現をサポートします。
- Perlなどの他のプログラミングコードを含めることができます。
バッチスクリプトの一般的な使用法のいくつかは次のとおりです-
- さまざまな目的のためのサーバーのセットアップ。
- 不要なファイルやログファイルの削除などのハウスキーピングアクティビティの自動化。
- ある環境から別の環境へのアプリケーションの展開を自動化します。
- 一度にさまざまなマシンにプログラムをインストールします。
バッチスクリプトは、コマンドが順番に実行される行を含む単純なテキストファイルに保存されます。 これらのファイルには、BATまたはCMDという特別な拡張子が付いています。 このタイプのファイルは、コマンドインタープリターと呼ばれるシステムファイルによって提供されるインターフェイス(シェルとも呼ばれます)を介して認識され、実行されます。 Windowsシステムでは、このインタープリターはcmd.exeとして知られています。
バッチファイルの実行は、クリックするだけの簡単なことです。 バッチファイルは、コマンドプロンプトまたはStart-Run行で実行することもできます。 そのような場合、ファイルのパスがパス環境にない限り、フルパス名を使用する必要があります。 以下は、バッチスクリプトの簡単な例です。 このバッチスクリプトを実行すると、現在のディレクトリ内のすべてのファイルが削除されます。
:: Deletes All files in the Current Directory With Prompts and Warnings
::(Hidden, System, and Read-Only Files are Not Affected)
:: @ECHO OFF
DEL . DR
バッチスクリプト-環境
この章では、バッチスクリプトに関連する環境について説明します。
作成と実行
通常、バッチファイルを作成するには、メモ帳を使用します。 これは、バッチファイルを作成するための最も簡単なツールです。 次は、バッチスクリプトの実行環境です。 Windowsシステムでは、これはコマンドプロンプトまたはcmd.exeを介して行われます。 すべてのバッチファイルはこの環境で実行されます。
以下は、cmd.exeを起動するさまざまな方法です-
- 方法1 *-C:\ Windows \ System32に移動し、cmdファイルをダブルクリックします。
- 方法2 *-runコマンド経由–次のスナップショットは、Windowsサーバー2012でコマンドプロンプト(cmd.exe)を見つけることを示しています。
cmd.exeが起動すると、次の画面が表示されます。 これは、バッチスクリプトを実行するための環境になります。
環境変数
コマンドプロンプトからバッチファイルを実行するには、バッチファイルが保存されている場所に移動するか、パスの環境変数にファイルの場所を入力する必要があります。 したがって、バッチファイルが場所 `+ C:\ Application \ bin +`に保存されていると仮定すると、PATH変数を含めるためにこれらの指示に従う必要があります。
OS | Output |
---|---|
Windows | Append the String; C:\Application\bin to the end of the system variable PATH.
|
バッチスクリプト-コマンド
この章では、頻繁に使用されるバッチコマンドのいくつかを見ていきます。
S.No
コマンドと説明
1
リンク:/batch_script/batch_script_ver [VER]
このバッチコマンドは、使用しているMS-DOSのバージョンを表示します。
2
リンク:/batch_script/batch_script_assoc [ASSOC]
これは、ファイルタイプ(FTYPE)に拡張子を関連付ける、既存の関連付けを表示する、または関連付けを削除するバッチコマンドです。
3
リンク:/batch_script/batch_script_cd [CD]
このバッチコマンドは、別のディレクトリを変更したり、現在のディレクトリを表示したりするのに役立ちます。
4
リンク:/batch_script/batch_script_cls [CLS]
このバッチコマンドは画面をクリアします。
5
リンク:/batch_script/batch_script_copy [COPY]
このバッチコマンドは、ある場所から別の場所にファイルをコピーするために使用されます。
6
リンク:/batch_script/batch_script_del [DEL]
このバッチコマンドは、ディレクトリではなくファイルを削除します。
7
リンク:/batch_script/batch_script_dir [DIR]
このバッチコマンドは、ディレクトリの内容を一覧表示します。
8
リンク:/batch_script/batch_script_date [DATE]
このバッチコマンドは、システムの日付を見つけるのに役立ちます。
9
リンク:/batch_script/batch_script_echo [ECHO]
このバッチコマンドは、メッセージを表示するか、コマンドのエコーをオンまたはオフにします。
10
リンク:/batch_script/batch_script_exit [EXIT]
このバッチコマンドは、DOSコンソールを終了します。
11
リンク:/batch_script/batch_script_md [MD]
このバッチコマンドは、現在の場所に新しいディレクトリを作成します。
12
リンク:/batch_script/batch_script_move [MOVE]
このバッチコマンドは、ディレクトリ間でファイルまたはディレクトリを移動します。
13
リンク:/batch_script/batch_script_path [PATH]
このバッチコマンドは、パス変数を表示または設定します。
14
リンク:/batch_script/batch_script_pause [PAUSE]
このバッチコマンドは、ユーザーにプロンプトを表示し、入力行が入力されるのを待ちます。
15
リンク:/batch_script/batch_script_prompt [PROMPT]
このバッチコマンドを使用して、cmd.exeプロンプトを変更またはリセットできます。
16
リンク:/batch_script/batch_script_rd [RD]
このバッチコマンドはディレクトリを削除しますが、削除する前にディレクトリを空にする必要があります。
17
リンク:/batch_script/batch_script_ren [REN]
ファイルとディレクトリの名前を変更します
18
リンク:/batch_script/batch_script_rem [REM]
このバッチコマンドは、バッチファイル内の注釈に使用され、注釈の内容が実行されないようにします。
19
リンク:/batch_script/batch_script_start [START]
このバッチコマンドは、新しいウィンドウでプログラムを起動するか、ドキュメントを開きます。
20
リンク:/batch_script/batch_script_time [TIME]
このバッチコマンドは、時刻を設定または表示します。
21
リンク:/batch_script/batch_script_type [TYPE]
このバッチコマンドは、ファイルの内容を出力に出力します。
22
リンク:/batch_script/batch_script_vol [VOL]
このバッチコマンドは、ボリュームラベルを表示します。
23
リンク:/batch_script/batch_script_attrib [ATTRIB]
現在のディレクトリ内のファイルの属性を表示または設定します
24
リンク:/batch_script/batch_script_chkdsk [CHKDSK]
このバッチコマンドは、ディスクの問題をチェックします。
25
リンク:/batch_script/batch_script_choice [CHOICE]
このバッチコマンドは、ユーザーにオプションのリストを提供します。
26
リンク:/batch_script/batch_script_cmd [CMD]
このバッチコマンドは、コマンドプロンプトの別のインスタンスを呼び出します。
27
リンク:/batch_script/batch_script_comp [COMP]
このバッチコマンドは、ファイルサイズに基づいて2つのファイルを比較します。
28
リンク:/batch_script/batch_script_convert [CONVERT]
このバッチコマンドは、ボリュームをFAT16またはFAT32ファイルシステムからNTFSファイルシステムに変換します。
29
リンク:/batch_script/batch_script_driverquery [DRIVERQUERY]
このバッチコマンドは、インストールされているすべてのデバイスドライバーとそのプロパティを表示します。
30
リンク:/batch_script/batch_script_expand [EXPAND]
このバッチコマンドは、圧縮された.cabキャビネットファイルからファイルを抽出します。
31
リンク:/batch_script/batch_script_find [FIND]
このバッチコマンドは、ファイルまたは入力で文字列を検索し、一致する行を出力します。
32
リンク:/batch_script/batch_script_format [FORMAT]
このバッチコマンドは、FAT、FAT32、NTFSなどのWindowsがサポートするファイルシステムを使用するようにディスクをフォーマットし、それによってディスクの以前のコンテンツを上書きします。
33
リンク:/batch_script/batch_script_help [HELP]
このバッチコマンドは、Windowsが提供するコマンドのリストを表示します。
34
リンク:/batch_script/batch_script_ipconfig [IPCONFIG]
このバッチコマンドは、Windows IP構成を表示します。 接続ごとの構成とその接続の名前を表示します。
35
リンク:/batch_script/batch_script_label [LABEL]
このバッチコマンドは、ディスクラベルを追加、設定、または削除します。
36
リンク:/batch_script/batch_script_more [MORE]
このバッチコマンドは、ファイルの内容を一度に1画面ずつ表示します。
37
リンク:/batch_script/batch_script_net [NET]
使用するコマンドに応じて、さまざまなネットワークサービスを提供します。
38
リンク:/batch_script/batch_script_ping [PING]
このバッチコマンドは、ICMP/IP「エコー」パケットをネットワーク経由で指定されたアドレスに送信します。
39
リンク:/batch_script/batch_script_shutdown [SHUTDOWN]
このバッチコマンドは、コンピューターをシャットダウンするか、現在のユーザーをログオフします。
40
リンク:/batch_script/batch_script_sort [SORT]
このバッチコマンドは、ソースファイルから入力を取得し、その内容をアルファベット順にAからZまたはZからAにソートします。 コンソールに出力を印刷します。
41
リンク:/batch_script/batch_script_subst [SUBST]
このバッチコマンドは、ドライブ文字をローカルフォルダーに割り当て、現在の割り当てを表示するか、割り当てを削除します。
42
リンク:/batch_script/batch_script_systeminfo [SYSTEMINFO]
このバッチコマンドは、コンピューターとそのオペレーティングシステムの構成を表示します。
43
リンク:/batch_script/batch_script_taskkill [TASKKILL]
このバッチコマンドは、1つ以上のタスクを終了します。
44
リンク:/batch_script/batch_script_tasklist [TASKLIST]
このバッチコマンドは、タスク名やプロセスID(PID)などのタスクを一覧表示します。
45
リンク:/batch_script/batch_script_xcopy [XCOPY]
このバッチコマンドは、より高度な方法でファイルとディレクトリをコピーします。
46
リンク:/batch_script/batch_script_tree [TREE]
このバッチコマンドは、現在のディレクトリのすべてのサブディレクトリのツリーを、任意のレベルの再帰または深さで表示します。
47
リンク:/batch_script/batch_script_fc [FC]
このバッチコマンドは、2つのファイル間の実際の違いをリストします。
48
リンク:/batch_script/batch_script_diskpart [DISKPART]
このバッチコマンドは、ディスクパーティションのプロパティを表示および構成します。
49
リンク:/batch_script/batch_script_title [TITLE]
このバッチコマンドは、コンソールウィンドウに表示されるタイトルを設定します。
50
リンク:/batch_script/batch_script_set [SET]
現在のシステムの環境変数のリストを表示します。
バッチスクリプト-ファイル
この章では、バッチファイルを作成、保存、実行、および変更する方法を学習します。
バッチファイルの作成
通常、バッチファイルはメモ帳で作成されます。 したがって、最も簡単な方法は、メモ帳を開いて、スクリプトに必要なコマンドを入力することです。 この演習では、メモ帳を開いて次のステートメントを入力します。
:: Deletes All files in the Current Directory With Prompts and Warnings
::(Hidden, System, and Read-Only Files are Not Affected)
::
@ECHO OFF
DEL .
DR
バッチファイルの保存
バッチファイルを作成したら、次のステップはバッチファイルを保存することです。 バッチファイルの拡張子は.batまたは.cmdです。 バッチファイルに名前を付けるときに留意するいくつかの一般的な規則-
- バッチファイルに名前を付けるときはスペースを避けてください。他のスクリプトから呼び出されたときに問題が発生する場合があります。
- システムで使用可能なping.cmdなどの一般的なバッチファイルにちなんで名前を付けないでください。
上のスクリーンショットは、バッチファイルを保存する方法を示しています。 バッチファイルを保存するときは、いくつかの点に注意してください。
- ファイル名の最後に.batまたは.cmdを忘れずに付けてください。
- 「すべてのファイル」として「種類として保存」オプションを選択します。
- ファイル名全体を引用符「」で囲みます。
バッチファイルの実行
バッチファイルを実行する手順は次のとおりです-
- *ステップ1 *-コマンドプロンプト(cmd.exe)を開きます。
- *ステップ2 *-.batまたは.cmdファイルが保存されている場所に移動します。
- *ステップ3 *-次の画像に示すようにファイルの名前を書き、Enterボタンを押してバッチファイルを実行します。
バッチファイルの変更
以下は、既存のバッチファイルを変更する手順です。
- *ステップ1 *-Windowsエクスプローラーを開きます。
- *ステップ2 *-.batまたは.cmdファイルが保存されている場所に移動します。
- *ステップ3 *-ファイルを右クリックして、コンテキストメニューから[編集]オプションを選択します。 ファイルは、さらに編集するためにメモ帳で開きます。
バッチスクリプト-構文
通常、バッチファイルの最初の行は多くの場合、次のコマンドで構成されます。
ECHOコマンド
@echo off
デフォルトでは、バッチファイルは実行時にコマンドを表示します。 この最初のコマンドの目的は、この表示をオフにすることです。 「echo off」コマンドは、「echo off」コマンド自体を除き、スクリプト全体の表示をオフにします。 「アット」記号「@」前にある場合、コマンドはそれ自体にも適用されます。
ドキュメンテーション
多くの場合、バッチファイルには「Rem」コマンドで始まる行も含まれています。 これは、コメントとドキュメントを入力する方法です。 コンピューターは、Remに続く行のすべてを無視します。 複雑さが増しているバッチファイルの場合、コメントを付けることをお勧めします。
最初のバッチスクリプトプログラム
簡単な最初のバッチスクリプトプログラムを作成しましょう。 メモ帳を開き、次のコード行を入力します。 ファイルを「List.cmd」として保存します。
コードは次のことを行います-
- echo offコマンドを使用して、コードの実行時にコマンドが表示されないようにします。
- Remコマンドを使用して、このバッチファイルが正確に何をするかを示すコメントを追加します。
- dirコマンドは、C:\ Program Filesの場所の内容を取得するために使用されます。
- 「>」コマンドを使用して、出力をファイルC:\ lists.txtにリダイレクトします。
- 最後に、echoコマンドを使用して、操作が完了したことをユーザーに通知します。
@echo off
Rem This is for listing down all the files in the directory Program files
dir "C:\Program Files" > C:\lists.txt
echo "The program has completed"
上記のコマンドを実行すると、C:\ Program Files内のファイルの名前がC:\ Lists.txtファイルに送信され、コマンドプロンプトに「プログラムが完了しました」というメッセージが表示されます。
バッチスクリプト-変数
バッチファイルには2種類の変数があります。 1つは、バッチファイルが呼び出されたときに渡すことができるパラメーター用であり、もう1つはsetコマンドを介して行われます。
コマンドライン引数
バッチスクリプトは、起動時に引数をバッチファイルに渡すことができるコマンドライン引数の概念をサポートしています。 引数は、変数%1、%2、%3などを介してバッチファイルから呼び出すことができます。
次の例は、3つのコマンドライン引数を受け入れ、それらをコマンドライン画面にエコーするバッチファイルを示しています。
@echo off
echo %1
echo %2
echo %3
上記のバッチスクリプトがtest.batというファイルに保存されており、次のようにバッチを実行する場合
Test.bat 1 2 3
以下は、バッチファイルが実行されたときにコマンドプロンプトでどのように表示されるかのスクリーンショットです。
上記のコマンドは、次の出力を生成します。
1
2
3
バッチを次のように実行する場合
Example 1 2 3 4
出力は上記と同じままです。 ただし、4番目のパラメーターは無視されます。
設定コマンド
変数を初期化できるもう1つの方法は、「set」コマンドを使用することです。 以下は、setコマンドの構文です。
構文
set/A variable-name=value
どこで、
- variable-name は、設定する変数の名前です。
- *値*は、変数に対して設定する必要がある値です。
- /A – このスイッチは、値が本質的に数値である必要がある場合に使用されます。
次の例は、setコマンドの簡単な使用方法を示しています。
例
@echo off
set message=Hello World
echo %message%
- 上記のコードスニペットでは、messageという変数が定義され、「Hello World」の値で設定されています。
- 変数の値を表示するには、変数を%記号で囲む必要があることに注意してください。
出力
上記のコマンドは、次の出力を生成します。
Hello World
数値の使用
バッチスクリプトでは、数値を保持する変数を定義することもできます。 これは、/Aスイッチを使用して実行できます。
次のコードは、/Aスイッチを使用して数値を設定する簡単な方法を示しています。
@echo off
SET/A a = 5
SET/A b = 10
SET/A c = %a% + %b%
echo %c%
- 最初に、2つの変数の値aとbをそれぞれ5と10に設定します。
- これらの値を追加し、変数cに格納しています。 *最後に、変数cの値を表示しています。
上記のプログラムの出力は15になります。
すべての算術演算子はバッチファイルで機能します。 次の例は、算術演算子をバッチファイルで使用できることを示しています。
@echo off
SET/A a = 5
SET/A b = 10
SET/A c = %a% + %b%
echo %c%
SET/A c = %a% - %b%
echo %c%
SET/A c = %b%/%a%
echo %c%
SET/A c = %b%* %a%
echo %c%
上記のコマンドは、次の出力を生成します。
15
-5
2
50
ローカル変数とグローバル変数
プログラミング言語には、変数を何らかのスコープを持つものとしてマークするオプションがあります。 それらにアクセスできるコードのセクション。 通常、グローバルスコープを持つ変数にはプログラムからどこからでもアクセスできますが、ローカルスコープの変数には、アクセスできる境界が定義されています。
DOSスクリプトには、ローカルおよびグローバルスコープの変数の定義もあります。 デフォルトでは、変数はコマンドプロンプトセッション全体に対してグローバルです。 SETLOCALコマンドを呼び出して、スクリプトのスコープに対して変数をローカルにします。 SETLOCALを呼び出した後、ENDLOCALの呼び出し、EXITの呼び出し、または実行がスクリプトのファイルの終わり(EOF)に達すると、変数の割り当てが元に戻ります。 次の例は、ローカル変数とグローバル変数がスクリプトで設定されている場合の違いを示しています。
例
@echo off
set globalvar = 5
SETLOCAL
set var = 13145
set/A var = %var% + 5
echo %var%
echo %globalvar%
ENDLOCAL
上記のプログラムについて注意すべき重要なことはほとんどありません。
- 「globalvar」はグローバルスコープで定義され、スクリプト全体で使用できます。
- 「var」変数は、「SETLOCAL」ブロックと「ENDLOCAL」ブロックで囲まれているため、ローカルスコープで定義されます。 したがって、この変数は「ENDLOCAL」ステートメントが実行されるとすぐに破棄されます。
出力
上記のコマンドは、次の出力を生成します。
13150
5
ENDLOCALステートメントの後、「var」変数が存在しなくなるため、コマンドecho%var%は何も生成しません。
環境変数の使用
バッチファイル全体で使用される変数がある場合は、常に環境変数を使用することをお勧めします。 環境変数が定義されると、%記号を使用してアクセスできます。 次の例は、システムで定義されたJAVA_HOMEを表示する方法を示しています。 JAVA_HOME変数は、通常、さまざまなアプリケーションで使用される重要なコンポーネントです。
@echo off
echo %JAVA_HOME%
出力には、システムごとに依存するJAVA_HOMEディレクトリが表示されます。 以下は出力の例です。
C:\Atlassian\Bitbucket\4.0.1\jre
バッチスクリプト-コメント
作成されたスクリプトにコメントやドキュメントを追加することは常に良い習慣です。 これは、スクリプトが実際に実行することを理解するために、スクリプトのメンテナンスに必要です。
たとえば、コメントの形式を持たない次のコードを考えてみましょう。 次のスクリプトを開発していない平均的な人がスクリプトを理解しようとすると、その人がスクリプトの実際の動作を理解するのに多くの時間がかかります。
ECHO OFF
IF NOT "%OS%"=="Windows_NT" GOTO Syntax
ECHO.%* | FIND "?" >NUL
IF NOT ERRORLEVEL 1 GOTO Syntax
IF NOT [%2]==[] GOTO Syntax
SETLOCAL
SET WSS=
IF NOT [%1]==[] FOR/F "tokens = 1 delims = \ " %%A IN ('ECHO.%~1') DO SET WSS = %%A
FOR/F "tokens = 1 delims = \ " %%a IN ('NET VIEW ^| FIND/I "\\%WSS%"') DO FOR/F
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND/I/V "%%a" ^| FIND "<03>"')
DO ECHO.%%a %%A
ENDLOCAL
GOTO:EOF
ECHO Display logged on users and their workstations.
ECHO Usage: ACTUSR [ filter ]
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part
of the computer name^(s^) to be displayed
Remステートメントを使用したコメント
バッチスクリプトでコメントを作成するには2つの方法があります。 1つはRemコマンドを使用する方法です。 Remステートメントに続くテキストはコメントとして扱われ、実行されません。 このステートメントの一般的な構文は次のとおりです。
構文
Rem Remarks
ここで、「備考」は追加する必要があるコメントです。
次の例は、 Rem コマンドの簡単な使用方法を示しています。
例
@echo off
Rem This program just displays Hello World
set message=Hello World
echo %message%
出力
上記のコマンドは、次の出力を生成します。 Remステートメントのある行は実行されないことに気付くでしょう。
Hello World
::ステートメントを使用したコメント
バッチスクリプトでコメントを作成するもう1つの方法は、::コマンドを使用することです。 ::ステートメントに続くテキストはコメントとして扱われ、実行されません。 このステートメントの一般的な構文は次のとおりです。
構文
:: Remarks
ここで、「備考」は追加する必要のあるコメントです。
次の例は、Remコマンドの簡単な使用方法を示しています。
例
@echo off
:: This program just displays Hello World
set message = Hello World
echo %message%
出力
上記のコマンドは、次の出力を生成します。 ::ステートメントを含む行は実行されないことに気付くでしょう。
Hello World
注-Remの行が多すぎると、バッチファイルのコードの各行を実行する必要があるため、コードの速度が低下する可能性があります。
このトピックの冒頭で見た大きなスクリプトの例と、ドキュメントが追加されたときの外観を見てみましょう。
::===============================================================
:: The below example is used to find computer and logged on users
::
::===============================================================
ECHO OFF
:: Windows version check
IF NOT "%OS%"=="Windows_NT" GOTO Syntax
ECHO.%* | FIND "?" >NUL
:: Command line parameter check
IF NOT ERRORLEVEL 1 GOTO Syntax
IF NOT [%2]==[] GOTO Syntax
:: Keep variable local
SETLOCAL
:: Initialize variable
SET WSS=
:: Parse command line parameter
IF NOT [%1]==[] FOR/F "tokens = 1 delims = \ " %%A IN ('ECHO.%~1') DO SET WSS = %%A
:: Use NET VIEW and NBTSTAT to find computers and logged on users
FOR/F "tokens = 1 delims = \ " %%a IN ('NET VIEW ^| FIND/I "\\%WSS%"') DO FOR/F
"tokens = 1 delims = " %%A IN ('NBTSTAT -a %%a ^| FIND/I/V "%%a" ^| FIND
"<03>"') DO ECHO.%%a %%A
:: Done
ENDLOCAL
GOTO:EOF
:Syntax
ECHO Display logged on users and their workstations.
ECHO Usage: ACTUSR [ filter ]
IF "%OS%"=="Windows_NT" ECHO Where: filter is the first part of the
computer name^(s^) to be displayed
これで、コードを開発していないユーザーにとってコードがより理解しやすくなり、保守性が向上したことがわかります。
バッチスクリプト-文字列
DOSでは、文字列は「Hello、World!」などの文字の順序付きコレクションです。
S.No | Strings & Description |
---|---|
1 |
DOSでは、次の方法で文字列を作成できます。 |
2 |
空の文字列 |
3 |
文字列補間は、定数、変数、リテラル、および式の組み合わせから新しい文字列値を構築する方法であり、その値を文字列リテラル内に含めます。 |
4 |
set演算子を使用して、2つの文字列または文字列と文字、または2つの文字を連結できます。 以下は、文字列連結の使用方法を示す簡単な例です。 |
5 |
DOSスクリプトでは、文字列の長さを見つけるための長さ関数は定義されていません。 同じために使用できるカスタム定義関数があります。 以下は、文字列の長さを確認するためのカスタム定義関数の例です。 |
6 |
セット変数を使用して文字列として設定された変数は、セット変数を使用している/Aスイッチを使用して整数に変換できます。 次の例は、これを実現する方法を示しています。 |
7 |
これはテキストを右に揃えるために使用され、通常は数値列の読みやすさを改善するために使用されます。 |
8 |
これは、文字列の先頭から文字を抽出するために使用されます。 |
9 |
これは、文字列内の文字の位置を介して部分文字列を抽出するために使用されます。 |
10 |
文字列置換機能を使用して、別の文字列から部分文字列を削除することもできます。 |
11 |
これは、文字列の最初と最後の文字を削除するために使用されます。 |
12 |
これは、置換によって文字列内のすべてのスペースを削除するために使用されます。 |
13 |
部分文字列を別の文字列に置き換えるには、文字列置換機能を使用します。 |
14 |
これは、文字列の末尾から文字を抽出するために使用されます。 |
バッチスクリプト-配列
配列は、バッチスクリプトで型として特に定義されていませんが、実装できます。 配列がバッチスクリプトで実装される場合、次のことに注意する必要があります。
- 配列の各要素は、setコマンドで定義する必要があります。
- 配列の値を反復処理するには、「for」ループが必要です。
配列を作成する
配列は、次のsetコマンドを使用して作成されます。
set a[0]=1
0は配列のインデックスで、1は配列の最初の要素に割り当てられた値です。
配列を実装する別の方法は、値のリストを定義し、値のリストを反復処理することです。 次の例は、これを実装する方法を示しています。
例
@echo off
set list = 1 2 3 4
(for %%a in (%list%) do (
echo %%a
))
出力
上記のコマンドは、次の出力を生成します。
1
2
3
4
配列へのアクセス
添え字構文を使用して、配列の名前の直後に角かっこ内に取得する値のインデックスを渡すことで、配列から値を取得できます。
例
@echo off
set a[0]=1
echo %a[0]%
この例では、インデックスは0から始まります。つまり、インデックスとして0を使用して最初の要素にアクセスでき、インデックスとして1を使用して2番目の要素にアクセスできるということです。 次の例をチェックして、配列を作成、初期化、アクセスします-
@echo off
set a[0] = 1
set a[1] = 2
set a[2] = 3
echo The first element of the array is %a[0]%
echo The second element of the array is %a[1]%
echo The third element of the array is %a[2]%
上記のコマンドは、次の出力を生成します。
The first element of the array is 1
The second element of the array is 2
The third element of the array is 3
配列の変更
配列の最後に要素を追加するには、配列要素の最後のインデックスとともにset要素を使用できます。
例
@echo off
set a[0] = 1
set a[1] = 2
set a[2] = 3
Rem Adding an element at the end of an array
Set a[3] = 4
echo The last element of the array is %a[3]%
上記のコマンドは、次の出力を生成します。
The last element of the array is 4
あなたは、次の例に示すように、特定のインデックスで新しい値を割り当てることにより、配列の既存の要素を変更することができます-
@echo off
set a[0] = 1
set a[1] = 2
set a[2] = 3
Rem Setting the new value for the second element of the array
Set a[1] = 5
echo The new value of the second element of the array is %a[1]%
上記のコマンドは、次の出力を生成します。
The new value of the second element of the array is 5
配列の繰り返し
配列の繰り返しは、「for」ループを使用し、配列の各要素を通過することにより実現されます。 次の例は、配列を実装できる簡単な方法を示しています。
@echo off
setlocal enabledelayedexpansion
set topic[0] = comments
set topic[1] = variables
set topic[2] = Arrays
set topic[3] = Decision making
set topic[4] = Time and date
set topic[5] = Operators
for/l %%n in (0,1,5) do (
echo !topic[%%n]!
)
上記のプログラムについては、次のことに注意する必要があります-
- 配列の各要素は、setコマンドを使用して明確に定義する必要があります。
- 範囲を移動するための/Lパラメーターを使用した「for」ループは、配列を反復処理するために使用されます。
出力
上記のコマンドは、次の出力を生成します。
Comments
variables
Arrays
Decision making
Time and date
Operators
配列の長さ
配列の長さは、配列内の要素の数を決定する直接的な機能がないため、配列内の値のリストを反復処理することによって行われます。
@echo off
set Arr[0] = 1
set Arr[1] = 2
set Arr[2] = 3
set Arr[3] = 4
set "x = 0"
:SymLoop
if defined Arr[%x%] (
call echo %%Arr[%x%]%%
set/a "x+=1"
GOTO :SymLoop
)
echo "The length of the array is" %x%
出力
出力上記のコマンドは、次の出力を生成します。
The length of the array is 4
配列での構造の作成
構造は、実装のために少し余分なコーディングを使用して、バッチファイルで実装することもできます。 次の例は、これを実現する方法を示しています。
例
@echo off
set len = 3
set obj[0].Name = Joe
set obj[0].ID = 1
set obj[1].Name = Mark
set obj[1].ID = 2
set obj[2].Name = Mohan
set obj[2].ID = 3
set i = 0
:loop
if %i% equ %len% goto :eof
set cur.Name=
set cur.ID=
for/f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do (
set cur.%%k=%%l
)
echo Name = %cur.Name%
echo Value = %cur.ID%
set/a i = %i%+1
goto loop
上記のコードについて、次の重要事項に注意する必要があります。
- setコマンドを使用して定義された各変数には、配列の各インデックスに関連付けられた2つの値があります。
- 変数 i は0に設定されているため、3である配列の長さで構造体をループできます。
- iの値が len の値と等しいかどうかの条件を常にチェックし、等しくない場合はコードをループします。
- obj [%i%]表記を使用して、構造の各要素にアクセスできます。
出力
上記のコマンドは、次の出力を生成します。
Name = Joe
Value = 1
Name = Mark
Value = 2
Name = Mohan
Value = 3
バッチスクリプト-意思決定
意思決定構造では、プログラマーが、プログラムによって評価またはテストされる1つ以上の条件、および条件が true と決定された場合に実行されるステートメント、およびオプションで実行される他のステートメントを指定する必要があります。条件が false であると判断された場合。
S.No | Strings & Description |
---|---|
1 |
最初の意思決定ステートメントは「if」ステートメントです。 |
2 |
次の意思決定ステートメントは、If/elseステートメントです。 このステートメントの一般的な形式は次のとおりです。 |
3 |
場合によっては、複数の「if」ステートメントを相互に埋め込む必要があります。 このステートメントの一般的な形式は次のとおりです。 |
バッチスクリプト-オペレーター
演算子は、特定の数学的または論理的な操作を実行するようコンパイラーに指示する記号です。
バッチスクリプトでは、次の種類の演算子が可能です。
- 算術演算子
- 関係演算子
- 論理演算子
- 割り当て演算子
- ビットごとの演算子
算術演算子
バッチスクリプト言語は、通常の算術演算子を任意の言語としてサポートします。 使用可能な算術演算子は次のとおりです。
link:/batch_script/batch_script_arithmetic_operators [例を表示]
Operator | Description | Example |
---|---|---|
PLUS | Addition of two operands | 1 PLUS 2 will give 3 |
− | Subtracts second operand from the first | 2 − 1 will give 1 |
* | Multiplication of both operands | 2* 2 will give 4 |
/ | Division of the numerator by the denominator | 3/2 will give 1.5 |
% | Modulus operator and remainder of after an integer/float division | 3 % 2 will give 1 |
関係演算子
関係演算子は、オブジェクトの比較を許可します。 以下は利用可能な関係演算子です。
link:/batch_script/batch_script_relational_operators [例を表示]
Operator | Description | Example |
---|---|---|
EQU | Tests the equality between two objects | 2 EQU 2 will give true |
NEQ | Tests the difference between two objects | 3 NEQ 2 will give true |
LSS | Checks to see if the left object is less than the right operand | 2 LSS 3 will give true |
LEQ | Checks to see if the left object is less than or equal to the right operand | 2 LEQ 3 will give true |
GTR | Checks to see if the left object is greater than the right operand | 3 GTR 2 will give true |
GEQ | Checks to see if the left object is greater than or equal to the right operand | 3 GEQ 2 will give true |
論理演算子
論理演算子は、ブール式を評価するために使用されます。 以下は利用可能な論理演算子です。
バッチ言語には、AND、OR、XORなどのブール論理演算子の完全なセットが装備されていますが、これは2進数専用です。 TRUEまたはFALSEの値もありません。 条件に使用できる唯一の論理演算子はNOT演算子です。
link:/batch_script/batch_script_logical_operators [例を表示]
Operator | Description |
---|---|
AND | This is the logical “and” operator |
OR | This is the logical “or” operator |
NOT | This is the logical “not” operator |
割り当て演算子
バッチスクリプト言語は、代入演算子も提供します。 使用可能な割り当て演算子は次のとおりです。
link:/batch_script/batch_script_assignment_operators [例を表示]
Operator | Description | Example |
---|---|---|
PLUS= | This adds right operand to the left operand and assigns the result to left operand |
Set/A a = 5 &plus; = 3 出力は8になります |
-= | This subtracts the right operand from the left operand and assigns the result to the left operand |
Set/A a = 5 a-= 3 出力は2になります |
*= | This multiplies the right operand with the left operand and assigns the result to the left operand |
Set/A a = 5 a * = 3 出力は15になります |
/= | This divides the left operand with the right operand and assigns the result to the left operand |
Set/A a = 6 a/= 3 出力は2になります |
%= | This takes modulus using two operands and assigns the result to the left operand |
Set/A a = 5 a%= 3 出力は2になります |
ビット演算子
ビット単位の演算子もバッチスクリプトで使用できます。 使用可能な演算子は次のとおりです。
リンク:/batch_script/batch_script_bitwise_operators [例を表示]
Operator | Description |
---|---|
& | This is the bitwise “and” operator |
This is the bitwise “or” operator | ^ |
以下は、これらの演算子を示す真理値表です。
p | q | p & q | p | q |
---|---|---|---|---|
p ^ q | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
0 | 1 | 0 | 0 | 1 |
バッチスクリプト-日付と時刻
DOSスクリプトの日付と時刻には、システムの日付と時刻を取得するための次の2つの基本的なコマンドがあります。
DATE
このコマンドは、システムの日付を取得します。
構文
DATE
例
@echo off
echo %DATE%
出力
現在の日付がコマンドプロンプトに表示されます。 例えば、
Mon 12/28/2015
TIME
このコマンドは、時刻を設定または表示します。
構文
TIME
例
@echo off
echo %TIME%
出力
現在のシステム時間が表示されます。 例えば、
22:06:52.87
以下は、さまざまな形式で日付と時刻を取得するために使用できるいくつかの実装です。
年月日形式の日付
例
@echo off
echo/Today is: %year%-%month%-%day%
goto :EOF
setlocal ENABLEEXTENSIONS
set t = 2&if "%date%z" LSS "A" set t = 1
for/f "skip=1 tokens = 2-4 delims = (-)" %%a in ('echo/^|date') do (
for/f "tokens = %t%-4 delims=.-/" %%d in ('date/t') do (
set %%a=%%d&set %%b=%%e&set %%c=%%f))
endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :EOF
出力
上記のコマンドは、次の出力を生成します。
Today is: 2015-12-30
バッチスクリプト-入力/出力
キーボード入力、画面上のテキストの印刷、画面上のエラーの印刷用に、3つの汎用「ファイル」があります。 stdin として知られる「標準入力」ファイルには、プログラム/スクリプトへの入力が含まれています。 stdout として知られる「標準出力」ファイルは、画面に表示する出力を書き込むために使用されます。 最後に、 stderr として知られる「Standard Err」ファイルには、画面に表示するエラーメッセージが含まれています。
これら3つの標準ファイル(標準ストリームとも呼ばれる)はそれぞれ、0、1、および2の番号を使用して参照されます。 Stdinはファイル0、stdoutはファイル1、stderrはファイル2です。
出力のリダイレクト(StdoutおよびStderr)
バッチファイルの一般的な方法の1つは、プログラムの出力をログファイルに送信することです。 >演算子は、stdoutまたはstderrを別のファイルに送信またはリダイレクトします。 次の例は、これを行う方法を示しています。
Dir C:\ > list.txt
上記の例では、コマンドDir C:\の stdout がファイルlist.txtにリダイレクトされます。
リダイレクトフィルターに数字の2を追加すると、 stderr がfiles.txtファイルにリダイレクトされます。
Dir C:\ 2> list.txt
ファイル番号と「&」プレフィックスを使用して、 stdout および stderr ストリームを結合することもできます。 以下はその一例です。
DIR C:\ > lists.txt 2>&1
プログラム出力の抑制
擬似ファイルNULは、プログラムからの出力を破棄するために使用されます。 次の例は、コマンドDIRの出力が出力をNULに送信することによって破棄されることを示しています。
Dir C:\ > NUL
Stdin
Stdinを使用するには、回避策を使用してこれを達成する必要があります。 これは、CONと呼ばれるコマンドプロンプトの独自のstdinをリダイレクトすることで実行できます。
次の例は、lists.txtというファイルに出力をリダイレクトする方法を示しています。 以下のコマンドを実行すると、コマンドプロンプトは、EOF文字を取得するまでユーザーが入力したすべての入力を受け取ります。 後で、すべての入力をファイルlists.txtに送信します。
TYPE CON > lists.txt
バッチスクリプト-リターンコード
デフォルトでは、コマンドラインの実行が完了すると、実行が成功した場合はゼロを返し、実行が失敗した場合はゼロ以外を返します。 実行が失敗した後にバッチスクリプトがゼロ以外の値を返す場合、ゼロ以外の値はエラー番号を示します。 次に、エラー番号を使用してエラーの内容を判断し、それに応じて解決します。
一般的な終了コードとその説明は次のとおりです。
Error Code | Description |
---|---|
0 | Program successfully completed. |
1 | Incorrect function. Indicates that Action has attempted to execute non-recognized command in Windows command prompt cmd.exe. |
2 | The system cannot find the file specified. Indicates that the file cannot be found in specified location. |
3 | The system cannot find the path specified. Indicates that the specified path cannot be found. |
5 | Access is denied. Indicates that user has no access right to specified resource. |
9009 0x2331 |
Program is not recognized as an internal or external command, operable program or batch file. Indicates that command, application name or path has been misspelled when configuring the Action. |
221225495 0xC0000017 -1073741801 a |
十分な仮想メモリが使用できません。 Windowsのメモリが不足していることを示しています。 a |
3221225786 0xC000013A -1073741510 |
The application terminated as a result of a CTRL+C. Indicates that the application has been terminated either by the user’s keyboard input CTRL+C or CTRL+Break or closing command prompt window. |
3221225794 0xC0000142 -1073741502 |
The application failed to initialize properly. Indicates that the application has been launched on a Desktop to which the current user has no access rights. Another possible cause is that either gdi32.dll or user32.dll has failed to initialize. |
エラーレベル
環境変数%ERRORLEVEL%には、最後に実行されたプログラムまたはスクリプトの戻りコードが含まれています。
デフォルトでは、ERRORLEVELを確認する方法は次のコードを使用します。
構文
IF %ERRORLEVEL% NEQ 0 (
DO_Something
)
バッチファイルの最後にコマンドEXIT/B%ERRORLEVEL%を使用して、バッチファイルからエラーコードを返すのが一般的です。
バッチファイルの最後でEXIT/Bを実行すると、バッチファイルの実行が停止します。
バッチファイルの末尾でEXIT/B <exitcodes>を使用して、カスタムリターンコードを返します。
環境変数%ERRORLEVEL%には、バッチファイル内の最新のエラーレベルが含まれます。これは、最後に実行されたコマンドの最新のエラーコードです。 同じ変数が異なるコンピューターで異なる値に展開されるため、バッチファイルでは、定数値の代わりに環境変数を使用することを常にお勧めします。
バッチファイルからエラーコードを確認する方法の簡単な例を見てみましょう。
例
次のコードを持つFind.cmdというバッチファイルがあるとします。 コードでは、lists.txtというファイルが見つからない場合、errorlevelを7に設定する必要があることを明確に述べています。 同様に、変数userprofileが定義されていない場合、errorlevelコードを9に設定する必要があります。
if not exist c:\lists.txt exit 7
if not defined userprofile exit 9
exit 0
最初にFind.cmdを呼び出すApp.cmdという別のファイルがあるとします。 これで、Find.cmdがエラーを返し、errorlevelを0より大きい値に設定すると、プログラムが終了します。 次のバッチファイルでは、Find.cnd findを呼び出した後、実際にerrorlevelが0より大きいかどうかを確認します。
Call Find.cmd
if errorlevel gtr 0 exit
echo “Successful completion”
出力
上記のプログラムでは、次のシナリオを出力として使用できます-
- ファイルc:\ lists.txtが存在しない場合、コンソール出力には何も表示されません。
- 変数userprofileが存在しない場合、コンソール出力には何も表示されません。
- 上記の両方の条件に合格すると、コマンドプロンプトに文字列「Successful completion」が表示されます。
ループ
意思決定の章では、順番に次々に実行されるステートメントを見てきました。 さらに、バッチスクリプトで実装を行って、プログラムのロジックの制御フローを変更することもできます。 その後、制御ステートメントのフローに分類されます。
S.No | Loops & Description |
---|---|
1 |
While Statement Implementation Batch Scriptで直接使用できるwhileステートメントはありませんが、ifステートメントとラベルを使用してこのループの実装を非常に簡単に行うことができます。 |
2 |
For Statement - List Implementations 「FOR」構造は、バッチファイルのループ機能を提供します。 値のリストを操作するための「for」ステートメントの一般的な構成は次のとおりです。 |
3 |
「for」ステートメントには、値の範囲を移動する機能もあります。 以下は、ステートメントの一般的な形式です。 |
4 |
Classic for Loop Implementation 以下は、ほとんどのプログラミング言語で利用できる古典的な「for」ステートメントです。 |
コマンドライン引数をループする
「for」ステートメントは、コマンドライン引数の確認にも使用できます。 次の例は、「for」ステートメントを使用してコマンドライン引数をループする方法を示しています。
例
@ECHO OFF
:Loop
IF "%1"=="" GOTO completed
FOR %%F IN (%1) DO echo %%F
SHIFT
GOTO Loop
:completed
出力
上記のコードがTest.batというファイルに保存されていると仮定します。 上記のコマンドは、バッチファイルが1,2および3のコマンドライン引数をTest.bat 1 2 3として渡す場合、次の出力を生成します。
1
2
3
S.No | Loops & Description |
---|---|
1 |
Break Statement Implementation breakステートメントは、プログラミング言語内のループ内の制御フローを変更するために使用されます。 breakステートメントは通常、ループ構造で使用され、最も内側のループを即座に終了させるために使用されます。 |
バッチスクリプト-関数
関数は、特定のタスクを実行するためにまとめられた一連のステートメントです。 バッチスクリプトでは、論理ステートメントをグループ化して関数を形成するために、同様のアプローチが採用されています。
他の言語と同様に、バッチスクリプトの関数は同じ手順に従います-
- 関数宣言-関数の名前、戻り値の型、およびパラメーターについてコンパイラーに通知します。
- 関数の定義-関数の実際の本体を提供します。
関数定義
バッチスクリプトでは、ラベルステートメントを使用して関数を定義します。 関数が新しく定義されると、関数への入力「パラメーター」として1つまたは複数の値を取り、本体内の関数を処理し、値を出力「戻り型」として関数に戻すことができます。
すべての関数には関数名があり、関数が実行するタスクを説明しています。 関数を使用するには、その関数をその名前で「呼び出し」、関数のパラメーターのタイプに一致する入力値(引数)を渡します。
以下は、単純な関数の構文です。
:function_name
Do_something
EXIT/B 0
- function_nameは、関数に与えられた名前で、関数が実際に行うことと一致する何らかの意味を持つ必要があります。
- EXITステートメントは、関数が適切に終了することを保証するために使用されます。
以下は、単純な関数の例です。
例
:Display
SET/A index=2
echo The value of index is %index%
EXIT/B 0
S.No | Functions & Description |
---|---|
1 |
関数は、callコマンドを使用してバッチスクリプトで呼び出されます。 |
2 |
関数は、関数の呼び出し時にパラメーターを渡すだけでパラメーターを操作できます。 |
3 |
関数は、変数名を渡すだけで戻り値を処理できます |
4 |
関数内のローカル変数を使用して、名前の競合を回避し、変数の変更を関数に対してローカルに保つことができます。 |
5 |
変数の変更を関数のローカルに保持し、呼び出し元には見えないようにすることで、関数の本体を完全にカプセル化する機能。 |
6 |
バッチスクリプトでは、任意のプログラミング言語で予想される通常のファイルI/O操作を実行できます。 |
7 |
新しいファイルの作成は、リダイレクトフィルターの助けを借りて行われます>。 このフィルターを使用して、出力をファイルにリダイレクトできます。 |
8 |
ファイルへのコンテンツの書き込みも、リダイレクトフィルターの助けを借りて行われます。 このフィルターを使用して、出力をファイルにリダイレクトできます。 |
9 |
ファイルへのコンテンツの書き込みも、二重リダイレクトフィルター>>を使用して行われます。 このフィルターを使用して、出力をファイルに追加できます。 |
10 |
バッチスクリプトでのファイルの読み取りは、FORループコマンドを使用して、読み取る必要のあるファイルで定義されている各行を経由して行われます。 |
11 |
ファイルを削除するために、バッチスクリプトはDELコマンドを提供します。 |
12 |
ファイルの名前を変更するために、バッチスクリプトはRENまたはRENAMEコマンドを提供します。 |
13 |
ファイルを移動するために、バッチスクリプトはMOVEコマンドを提供します。 |
14 |
パイプ演算子( |
)は、あるコマンドの出力(デフォルトではSTDOUT)を受け取り、別のコマンドの入力(デフォルトではSTDIN)に送ります。 | 15 |
バッチファイルを実行すると、コマンドラインパラメータを渡すオプションが提供されます。このパラメータは、プログラム内で読み取ってさらに処理することができます。 |
16 |
コマンドライン引数の制限の1つは、%9までの引数のみを受け入れることができることです。 この制限の例を見てみましょう。 |
17 |
バッチスクリプトでは、任意のプログラミング言語で予想される通常のフォルダーベースの操作を実行できます。 |
18 |
フォルダーの作成は、MD(Make directory)コマンドを使用して行われます。 |
19 |
フォルダーの内容のリストは、dirコマンドを使用して実行できます。 このコマンドを使用すると、現在のディレクトリで使用可能なファイルとディレクトリを表示できます。 |
20 |
フォルダーを削除するために、バッチスクリプトはDELコマンドを提供します。 |
21 |
フォルダーの名前を変更するために、バッチスクリプトはRENまたはRENAMEコマンドを提供します。 |
22 |
バッチスクリプト-プロセス
この章では、バッチスクリプトに関連するさまざまなプロセスについて説明します。
実行中のプロセスのリストを表示する
バッチスクリプトでは、TASKLISTコマンドを使用して、システム内で現在実行中のプロセスのリストを取得できます。
構文
TASKLIST [/S system [/U username [/P [password]]]] [/M [module] |/SVC |/V] [/FI filter]
[/FO format] [/NH]
以下は、TASKLISTコマンドに表示できるオプションの説明です。
S.No. | Options & Description |
---|---|
1. |
/S system 接続するリモートシステムを指定します |
2. |
/U
コマンドを実行するユーザーコンテキストを指定します。 |
3. |
/P [password] 指定されたユーザーコンテキストのパスワードを指定します。 省略すると入力を求められます。 |
4. |
/M [module] 指定されたexe/dll名を現在使用しているすべてのタスクをリストします。 モジュール名が指定されていない場合、ロードされたすべてのモジュールが表示されます。 |
5. |
/SVC 各プロセスでホストされているサービスを表示します。 |
6. |
/V 詳細なタスク情報を表示します。 |
7. |
/FI filter フィルターによって指定された特定の基準に一致する一連のタスクを表示します。 |
8. |
/FO format 出力形式を指定します。 有効な値:「TABLE」、「LIST」、「CSV」。 |
9. |
/NH 「列ヘッダー」を出力に表示しないことを指定します。 「TABLE」および「CSV」形式でのみ有効です。 |
例
TASKLIST
上記のコマンドは、ローカルシステムで実行されているすべてのプロセスのリストを取得します。 以下は、上記のコマンドをそのまま実行したときにレンダリングされる出力のスナップショットです。 次の出力からわかるように、システムで実行されているさまざまなプロセスを取得するだけでなく、各プロセスのメモリ使用量も取得します。
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 4 K
System 4 Services 0 272 K
smss.exe 344 Services 0 1,040 K
csrss.exe 528 Services 0 3,892 K
csrss.exe 612 Console 1 41,788 K
wininit.exe 620 Services 0 3,528 K
winlogon.exe 648 Console 1 5,884 K
services.exe 712 Services 0 6,224 K
lsass.exe 720 Services 0 9,712 K
svchost.exe 788 Services 0 10,048 K
svchost.exe 832 Services 0 7,696 K
dwm.exe 916 Console 1 117,440 K
nvvsvc.exe 932 Services 0 6,692 K
nvxdsync.exe 968 Console 1 16,328 K
nvvsvc.exe 976 Console 1 12,756 K
svchost.exe 1012 Services 0 21,648 K
svchost.exe 236 Services 0 33,864 K
svchost.exe 480 Services 0 11,152 K
svchost.exe 1028 Services 0 11,104 K
svchost.exe 1048 Services 0 16,108 K
wlanext.exe 1220 Services 0 12,560 K
conhost.exe 1228 Services 0 2,588 K
svchost.exe 1276 Services 0 13,888 K
svchost.exe 1420 Services 0 13,488 K
spoolsv.exe 1556 Services 0 9,340 K
tasklist > process.txt
上記のコマンドは、tasklistで表示される出力を取得して、process.txtファイルに保存します。
tasklist/fi "memusage gt 40000"
上記のコマンドは、メモリが40MBを超えるプロセスのみを取得します。 以下は、レンダリング可能なサンプル出力です。
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
dwm.exe 916 Console 1 127,912 K
explorer.exe 2904 Console 1 125,868 K
ServerManager.exe 1836 Console 1 59,796 K
WINWORD.EXE 2456 Console 1 144,504 K
chrome.exe 4892 Console 1 123,232 K
chrome.exe 4976 Console 1 69,412 K
chrome.exe 1724 Console 1 76,416 K
chrome.exe 3992 Console 1 56,156 K
chrome.exe 1168 Console 1 233,628 K
chrome.exe 816 Console 1 66,808 K
特定のプロセスを殺す
Microsoft Windows XP Professional、Windows 2003、またはそれ以降を実行しているユーザーは、プロセスID(PID)またはイメージ名によってWindowsコマンドラインからタスクを強制終了できます。 この目的で使用されるコマンドは、TASKILLコマンドです。
構文
TASKKILL [/S system [/U username [/P [password]]]] { [/FI filter]
[/PID processid |/IM imagename] } [/T] [/F]
以下は、TASKKILLコマンドに表示できるオプションの説明です。
S.No. | Options & Description |
---|---|
1. |
/S system 接続するリモートシステムを指定します |
2. |
/U
コマンドを実行するユーザーコンテキストを指定します。 |
3. |
/P [password] 指定されたユーザーコンテキストのパスワードを指定します。 省略すると入力を求められます。 |
4. |
/FI
フィルターを適用して一連のタスクを選択します。 "*"の使用を許可します。 ex. imagename eq acme *追加情報と例については、以下のフィルターを参照してください。 |
5. |
/PID
終了するプロセスのPIDを指定します。 PIDを取得するには、TaskListを使用してください。 |
6. |
/IM 画像名 終了するプロセスのイメージ名を指定します。 ワイルドカード「*」を使用して、すべてのタスクまたはイメージ名を指定できます。 |
7. |
/T 指定されたプロセスと、それによって開始されたすべての子プロセスを終了します。 |
8. |
/F プロセスを強制的に終了することを指定します。 |
例
taskkill/f/im notepad.exe
上記のコマンドは、開いている場合、開いているメモ帳タスクを強制終了します。
taskill/pid 9214
上記のコマンドは、9214のプロセスを持つプロセスを強制終了します。
新しいプロセスの開始
DOSスクリプトには、新しいプロセスを完全に開始する機能もあります。 これは、STARTコマンドを使用して実現されます。
構文
START "title" [/D path] [options] "command" [parameters]
どこで
- title -CMDウィンドウのタイトルバーのテキスト(必須)
- path -開始ディレクトリ。
- command -実行するコマンド、バッチファイル、または実行可能プログラム。
- parameters -コマンドに渡されるパラメーター。
以下は、STARTコマンドに表示できるオプションの説明です。
S.No. | Options & Description |
---|---|
1. |
/MIN 最小化された開始ウィンドウ |
2. |
/MAX ウィンドウを最大化して起動します。 |
3. |
/LOW IDLE優先度クラスを使用します。 |
4. |
/NORMAL NORMAL優先度クラスを使用します。 |
5. |
/ABOVENORMAL ABOVENORMAL優先度クラスを使用します。 |
6. |
/BELOWNORMAL BELOWNORMAL優先度クラスを使用します。 |
7. |
/HIGH 高優先度クラスを使用します。 |
8. |
/REALTIME REALTIME優先度クラスを使用します。 |
例
START "Test Batch Script"/Min test.bat
上記のコマンドは、新しいウィンドウでバッチスクリプトtest.batを実行します。 ウィンドウは最小化モードで起動し、「Test Batch Script」というタイトルも付けられます。
START "" "C:\Program Files\Microsoft Office\Winword.exe" "D:\test\TESTA.txt"
上記のコマンドは、実際に別のプロセスでMicrosoft Wordを実行し、MS WordでファイルTESTA.txtを開きます。
バッチスクリプト-エイリアス
エイリアスとは、既存のコマンドのショートカットまたはキーワードを作成することです。 ディレクトリ一覧に必要な詳細をすべて表示しないように、/wオプションを指定したディレクトリ一覧コマンドにすぎない以下のコマンドを実行するとします。
Dir/w
このコマンドへのショートカットを次のように作成するとします。
dw = dir/w
*dir/w* コマンドを実行する場合は、 *dw* という単語を入力するだけです。 「dw」という単語は、Dir/wコマンドのエイリアスになりました。
エイリアスを作成する
エイリアスは、 doskey コマンドを使用して管理されます。
構文
DOSKEY [options] [macroname=[text]]
どこで
- マクロ名-マクロの短縮名。
- text -呼び出したいコマンド。
以下は、DOSKEYコマンドに表示できるオプションの説明です。
S.No. | Options & Description |
---|---|
1. |
/REINSTALL Doskeyの新しいコピーをインストールします |
2. |
/LISTSIZE = size コマンド履歴バッファーのサイズを設定します。 |
3. |
/MACROS すべてのDoskeyマクロを表示します。 |
4. |
/MACROS:ALL Doskeyマクロを持つすべての実行可能ファイルのすべてのDoskeyマクロを表示します。 |
5. |
/MACROS:exename 指定された実行可能ファイルのすべてのDoskeyマクロを表示します。 |
6. |
/HISTORY メモリに保存されているすべてのコマンドを表示します。 |
7. |
/INSERT 入力する新しいテキストが古いテキストに挿入されることを指定します。 |
8. |
/OVERSTRIKE 新しいテキストが古いテキストを上書きすることを指定します。 |
9. |
/EXENAME = exename 実行可能ファイルを指定します。 |
10. |
/MACROFILE = filename インストールするマクロのファイルを指定します。 |
11. |
macroname 作成するマクロの名前を指定します。 |
12. |
text 記録するコマンドを指定します。 |
例
keys.batという新しいファイルを作成し、ファイルに次のコマンドを入力します。 次のコマンドは2つのエイリアスを作成します。1つはcdコマンド用で、testというディレクトリに自動的に移動します。 もう1つはdirコマンド用です。
@echo off
doskey cd = cd/test
doskey d = dir
コマンドを実行すると、コマンドプロンプトでこれらのエイリアスを実行できます。
出力
次のスクリーンショットは、上記で作成されたバッチファイルが実行された後、「d」コマンドを自由に入力でき、ディレクトリリストが表示され、エイリアスが作成されたことを示します。
エイリアスを削除する
エイリアスまたはマクロは、マクロの値をNULLに設定することにより削除できます。
例
@echo off
doskey cd = cd/test
doskey d = dir
d=
上記の例では、最初にマクロdをd = dirに設定しています。 その後、NULLに設定します。 dの値をNULLに設定しているため、マクロdは削除されます。
エイリアスの置き換え
エイリアスまたはマクロは、マクロの値を新しい目的の値に設定することで置き換えることができます。
例
@echo off
doskey cd = cd/test
doskey d = dir
d = dir/w
上記の例では、最初にマクロdをd = dirに設定しています。 その後、dir/wに設定します。 dの値を新しい値に設定したため、エイリアス「d」が新しい値を取得します。
バッチスクリプト-デバイス
Windowsには、システムに接続されたデバイスを操作するためのバッチスクリプトで使用できる改善されたライブラリがあります。 これは、デバイスコンソール-DevCon.exeとして知られています。
Windowsドライバーの開発者とテスターは、DevConを使用して、適切なINFファイル、ドライバースタック、ドライバーファイル、ドライバーパッケージなど、ドライバーが正しくインストールおよび構成されていることを確認できます。 スクリプトでDevConコマンド(有効化、無効化、インストール、開始、停止、および続行)を使用して、ドライバーをテストすることもできます。 DevCon は、ローカルコンピューターおよびリモートコンピューターでデバイス管理機能を実行するコマンドラインツールです。
ドライバーおよびデバイス情報の表示DevConは、ローカルコンピューターおよびリモートコンピューター(Windows XP以前を実行)上のドライバーとデバイスの次のプロパティを表示できます-
- ハードウェアID、互換性ID、およびデバイスインスタンスID。 これらの識別子は、デバイス識別文字列で詳細に説明されています。
- デバイス設定クラス。
- デバイスセットアップクラスのデバイス。
- INFファイルとデバイスドライバーファイル。
- ドライバーパッケージの詳細。
- ハードウェアリソース。
- デバイスのステータス。
- 期待されるドライバースタック。
- ドライバーストア内のサードパーティドライバーパッケージ。
- デバイスの検索DevConは、ハードウェアID、デバイスインスタンスID、またはデバイスセットアップクラスによって、ローカルまたはリモートコンピューター上のインストール済みデバイスとアンインストール済みデバイスを検索できます。
- デバイス設定の変更DevConは、以下の方法でローカルコンピューター上のプラグアンドプレイ(PnP)デバイスの状態または構成を変更できます-
- デバイスを有効にします。
- デバイスを無効にします。
- ドライバーの更新(対話型および非対話型)。
- デバイスをインストールします(devnodeを作成してソフトウェアをインストールします)。
- デバイスツリーからデバイスを削除し、デバイススタックを削除します。
- プラグアンドプレイデバイスを再スキャンします。
- ルート列挙デバイスのハードウェアIDを追加、削除、および並べ替えます。
- デバイスセットアップクラスの上下のフィルタードライバーを変更します。
- ドライバーストアからサードパーティのドライバーパッケージを追加および削除します。
デスクトップアプリケーション用のWDK、Visual Studio、およびWindows SDKをインストールすると、DevCon(DevCon.exe)が含まれます。 DevCon.exeキットは、インストール時に次の場所にあります。
%WindowsSdkDir%\tools\x64\devcon.exe
%WindowsSdkDir%\tools\x86\devcon.exe
%WindowsSdkDir%\tools\arm\devcon.exe
構文
devcon [/m:\\computer] [/r] command [arguments]
ここで
- /m:\\ computer -指定されたリモートコンピューターでコマンドを実行します。 バックスラッシュが必要です。
- /r -条件付き再起動。 変更を有効にするために再起動が必要な場合にのみ、操作の完了後にシステムを再起動します。
- command -DevConコマンドを指定します。
- コンピュータ上のデバイスに関する情報を一覧表示するには、次のコマンドを使用します-
- DevCon HwID
- DevConクラス
- DevCon ListClass
- DevCon DriverFiles
- DevCon DriverNodes
- DevConリソース
- DevConスタック
- DevConステータス
- DevCon Dp_enum
- コンピュータ上のデバイスに関する情報を検索するには、次のコマンドを使用します-
- DevCon Find
- DevCon FindAll
- デバイスを操作したり、その構成を変更するには、次のコマンドを使用します-
- DevCon Enable
- DevCon無効
- DevConアップデート
- DevCon UpdateNI
- DevConインストール
- DevCon削除
- DevCon再スキャン
- DevCon再起動
- DevCon再起動
- DevCon SetHwID
- DevCon ClassFilter
- DevCon Dp_add
- DevCon Dp_delete
例
次に、DevConコマンドの使用方法の例をいくつか示します。
List all driver files
次のコマンドは、DevCon DriverFiles操作を使用して、システム上のデバイスが使用するドライバーのファイル名をリストします。 このコマンドは、ワイルドカード文字(*)を使用して、システム上のすべてのデバイスを示します。 出力が広範囲にわたるため、コマンドはリダイレクト文字(>)を使用して、出力を参照ファイルdriverfiles.txtにリダイレクトします。
devcon driverfiles * > driverfiles.txt
次のコマンドは、DevConステータス操作を使用して、ローカルコンピューター上のすべてのデバイスのステータスを検索します。 その後、ステータスをstatus.txtファイルに保存して、ログに記録したり、後で確認したりします。 このコマンドは、ワイルドカード文字(*)を使用してすべてのデバイスを表し、リダイレクト文字(>)を使用して出力をstatus.txtファイルにリダイレクトします。
devcon status * > status.txt
次のコマンドは、DevCon Enableコマンドでプリンターセットアップクラスを指定することにより、コンピューター上のすべてのプリンターデバイスを有効にします。 このコマンドには/rパラメーターが含まれており、有効化を有効にする必要がある場合にシステムを再起動します。
devcon/r enable = Printer
次のコマンドは、DevCon Install操作を使用して、ローカルコンピューターにキーボードデバイスをインストールします。 コマンドには、デバイスのINFファイルへのフルパス(keyboard.inf)とハードウェアID( *PNP030b)が含まれます。
devcon/r install c:\windows\inf\keyboard.inf* PNP030b
次のコマンドは、コンピューターで新しいデバイスをスキャンします。
devcon scan
次のコマンドは、コンピューターを再スキャンして新しいデバイスを探します。
devcon rescan
バッチスクリプト-レジストリ
レジストリは、Windowsシステムの重要な要素の1つです。 これには、オペレーティングシステムのさまざまな側面に関する多くの情報が含まれています。 Windowsシステムにインストールされたほとんどすべてのアプリケーションは、何らかの形でレジストリと対話します。
レジストリには、キーと値の2つの基本要素が含まれています。 *レジストリキー*は、フォルダに似たコンテナオブジェクトです。 *レジストリ値*は、ファイルに似た非コンテナオブジェクトです。 キーには、値または追加のキーが含まれる場合があります。 キーは、Windowsのパス名に似た構文で参照され、バックスラッシュを使用して階層のレベルを示します。
この章では、値のクエリ、レジストリからの値の追加、削除、編集など、さまざまな機能について説明します。
S.No | Types of Registry & Description |
---|---|
1 |
レジストリからの読み取りは、REG QUERYコマンドを介して行われます。 |
2 |
レジストリへの追加は、REG ADDコマンドを介して行われます。 |
3 |
レジストリから削除するには、REG DELコマンドを使用します。 |
4 |
レジストリからのコピーは、REG COPYコマンドを介して行われます。 |
5 |
レジストリキーの比較は、REG COMPAREコマンドを介して行われます。 |
バッチスクリプト-ネットワーク
バッチスクリプトには、ネットワーク設定を操作する機能があります。 NETコマンドは、ネットワークまたはネットワーク設定を更新、修正、または表示するために使用されます。 この章では、netコマンドで使用可能なさまざまなオプションについて説明します。
S.No | NET Commands & Description |
---|---|
1 |
コンピューターの現在のパスワードとログオン制限を表示します。 |
2 |
現在のサーバーまたはワークグループの設定を表示します。 |
3 |
Windowsドメインコントローラーに接続されているコンピューターを追加または削除します。 |
4 |
このコマンドは次の目的に使用できます。 特定のユーザーアカウントの詳細を表示します。 |
5 |
このコマンドは、特定のサービスを停止および開始するために使用されます。 |
6 |
ワークステーションまたはサーバーのネットワーク統計を表示します。 |
7 |
共有リソースからコンピューターを接続または切断するか、接続に関する情報を表示します。 |
バッチスクリプト-印刷
NET PRINTコマンドを使用して、バッチスクリプト内から印刷を制御することもできます。
構文
PRINT [/D:device] [[drive:][path]filename[...]]
/D:device-印刷デバイスを指定します。
例
print c:\example.txt/c/d:lpt1
上記のコマンドは、example.txtファイルをパラレルポートlpt1に出力します。
コマンドラインプリンター制御
Windows 2000の時点では、PRINTUI.DLLおよびRUNDLL32.EXEを使用して、Windowsのコマンドラインからすべてではありませんが多くのプリンター設定を構成できます。
構文
RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry [ options ] [ @commandfile ]
利用可能なオプションのいくつかは次のとおりです-
- /dl -ローカルプリンターを削除します。
- /dn -ネットワークプリンター接続を削除します。
- /dd -プリンタードライバーを削除します。
- /e -印刷設定を表示します。
- /f [file] -infファイルまたは出力ファイル。
- /F [file] -/fで指定されたINFファイルが依存する可能性のあるINFファイルの場所。
- /ia -infファイルを使用してプリンタードライバーをインストールします。
- /id -プリンタードライバーの追加ウィザードを使用してプリンタードライバーをインストールします。
- /if -infファイルを使用してプリンターをインストールします。
- /ii -プリンターの追加ウィザードとinfファイルを使用してプリンターをインストールします。
- /il -プリンターの追加ウィザードを使用してプリンターをインストールします。
- /in -ネットワークプリンター接続を追加します。
- /ip -ネットワークプリンターインストールウィザードを使用してプリンターをインストールします。
- /k -指定されたプリンターにテストページを印刷します。プリンターのインストール時にコマンドと組み合わせることはできません。
- /l [path] -プリンタードライバーのソースパス。
- /m [model] -プリンタードライバーのモデル名。
- /n [name] -プリンター名。
- /o -プリンターキュービューを表示します。
- /p -プリンターのプロパティを表示します。
- /Ss -プリンター設定をファイルに保存します。
- /Sr -ファイルからプリンター設定を復元します。
- /y -プリンタをデフォルトとして設定します。
- /Xg -プリンター設定を取得します。
- /Xs -プリンター設定を設定します。
プリンターが存在するかどうかのテスト
ローカルプリンターではなくネットワークプリンターに接続している場合があります。 このような場合、印刷前に最初にプリンターが存在するかどうかを確認することは常に有益です。
プリンタの存在は、ほとんどのプリンタ設定の制御に使用されるRUNDLL32.EXE PRINTUI.DLLの助けを借りて評価できます。
例
SET PrinterName = Test Printer
SET file=%TEMP%\Prt.txt
RUNDLL32.EXE PRINTUI.DLL,PrintUIEntry/Xg/n "%PrinterName%"/f "%file%"/q
IF EXIST "%file%" (
ECHO %PrinterName% printer exists
) ELSE (
ECHO %PrinterName% printer does NOT exists
)
上記のコマンドは次のことを行います-
- 最初にプリンタ名を設定し、プリンタの設定を保持するファイル名を設定します。
- RUNDLL32.EXE PRINTUI.DLLコマンドは、ファイルの構成設定をPrt.txtファイルに送信することにより、プリンターが実際に存在するかどうかを確認するために使用されます
バッチスクリプト-デバッグ
多くの場合、バッチファイルの実行時に問題が発生する可能性があり、ほとんどの場合、バッチファイル自体の問題を特定するには、何らかの方法でバッチファイルをデバッグする必要があります。 以下は、バッチスクリプトファイルのデバッグに役立つテクニックの一部です。
エラーメッセージ
メッセージのソースを発見するには、次の手順に従います-
- ステップ1 *-&commat; ECHO OFFライン、つまり REM&commat; ECHO OFFまたは::&commat; ECHO OFF。
- ステップ2 *-必要なコマンドラインパラメータを使用してバッチファイルを実行し、後で比較するためにすべての出力をログファイルにリダイレクトします。
test.bat > batch.log 2>&1
- ステップ3 *-ファイルbatch.logでエラーメッセージを検索します
- ステップ4 *-予期しないまたは無効なコマンド、コマンドラインスイッチ、または値がないか、前の行を確認します。コマンドで使用される環境変数の値に特に注意してください。
- ステップ5 *-エラーを修正し、すべてのエラーメッセージが消えるまでこのプロセスを繰り返します。
複雑なコマンドライン
もう1つの一般的なエラーの原因は、たとえばFOR/Fループ内の誤った検索文字列を含む「ネストされた」FINDまたはFINDSTRコマンドなど、誤ってリダイレクトされたコマンドです。
これらの複雑なコマンドの有効性を確認するには、次の手順に従います-
- ステップ1 *-複雑なコマンドセットを使用する行の直前に「コマンドチェック行」を挿入します。
ECHOコマンドを挿入して、最初のTYPEコマンドの出力が終了し、次のTYPEコマンドの出力が開始する場所を示す例を次に示します。
TYPE %Temp%.\apipaorg.reg
ECHO.================================================ TYPE %Temp%.\apipaorg.reg
| FIND
"[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"
- ステップ2 *-手順に従って、上記のエラーメッセージソースを見つけます。
- ステップ3 *-「簡略化された」コマンドラインの出力に特に注意してください。出力は期待される形式ですか? 「トークン」の値または位置は予想通りですか?
サブルーチン
エラーメッセージを生成するサブルーチンは、同じバッチファイルで複数回呼び出される可能性があるため、エラーの原因を見つける際に余分な「チャレンジ」を引き起こします。
サブルーチンの不正な呼び出しの原因を見つけるのに役立つように、次の手順に従ってください-
- ステップ1 *-スクリプトの先頭でカウンター変数を追加およびリセットします-
SET Counter = 0
- ステップ2 *-サブルーチンの先頭に次の行を挿入して、サブルーチンが呼び出されるたびにカウンターをインクリメントします
SET/A Counter+=1
- ステップ3 *-カウンタのインクリメントの直後に、SETコマンドのみを含む別の行を挿入します。これにより、すべての環境変数とその値がリストされます。
- ステップ4 *-手順に従って、上記のエラーメッセージソースを見つけます。
Windowsバージョン
同じWindowsバージョンを実行する場合と実行しない場合がある他のコンピューターにバッチファイルを配布する場合は、できるだけ多くのWindowsバージョンでバッチファイルをテストする必要があります。
次の例は、さまざまなオペレーティングシステムのバージョンを確認して、関連するWindowsのバージョンを確認する方法を示しています。
@ECHO OFF
:: Check for Windows NT 4 and later
IF NOT "%OS%"=="Windows_NT" GOTO DontRun
:: Check for Windows NT 4
VER | FIND "Windows NT" >NUL && GOTO DontRun
:: Check for Windows 2000
VER | FIND "Windows 2000" >NUL && GOTO DontRun
:: Place actual code here . . .
:: End of actual code . . .
EXIT
:DontRun
ECHO Sorry, this batch file was written for Windows XP and later versions only
バッチスクリプト-ロギング
リダイレクトコマンドを使用すると、バッチスクリプトでログインできます。
構文
test.bat > testlog.txt 2> testerrors.txt
例
test.batというファイルを作成し、ファイルに次のコマンドを入力します。
net statistics/Server
上記のコマンドにはエラーがあります。netstatisticsコマンドのオプションが間違った方法で指定されているためです。
出力
上記のtest.batファイルを使用したコマンドが次のように実行された場合
test.bat > testlog.txt 2> testerrors.txt
そして、ファイルtesterrors.txtを開くと、次のエラーが表示されます。
The option/SERVER is unknown.
このコマンドの構文は次のとおりです-
NET STATISTICS
[WORKSTATION | SERVER]
NET HELPMSG 3506と入力すると、さらにヘルプが利用できます。
testlog.txtというファイルを開くと、実行されたコマンドのログが表示されます。
C:\tp>net statistics/Server