バッチスクリプト-クイックガイド
バッチスクリプトは、本質的に反復的なコマンドシーケンスを自動化するために組み込まれています。スクリプティングは、シェルでの生活をより簡単で生産的にするために、これらのコマンドシーケンスを自動化することにより、この必要性を軽減できる方法です。ほとんどの組織では、バッチスクリプトは、自動化するために何らかの方法で組み込まれています。
バッチスクリプトの機能のいくつかは次のとおりです。
ユーザーからの入力を読み取って、さらに処理できるようにします。
自動化とスクリプト作成を改善するために、for、if、while、switchなどの制御構造があります。
関数や配列などの高度な機能をサポートします。
正規表現をサポートします。
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を起動するさまざまな方法です-
Method 1 − C:\ Windows \ System32に移動し、cmdファイルをダブルクリックします。
Method 2 − runコマンドを使用–次のスナップショットは、Windows Server 2012でコマンドプロンプト(cmd.exe)を見つける方法を示しています。
cmd.exeを起動すると、次の画面が表示されます。これは、バッチスクリプトを実行するための環境になります。
環境変数
コマンドプロンプトからバッチファイルを実行するには、バッチファイルが保存されている場所に移動するか、パス環境変数にファイルの場所を入力する必要があります。したがって、バッチファイルがその場所C:\Application\bin
に保存されていると仮定すると、PATH変数を含めるにはこれらの手順に従う必要があります。
OS | 出力 |
---|---|
ウィンドウズ | 文字列を追加します。C:\Application\bin システム変数PATHの最後まで。 |
この章では、頻繁に使用されるバッチコマンドのいくつかを見ていきます。
S.No | コマンドと説明 |
---|---|
1 | VER このバッチコマンドは、使用しているMS-DOSのバージョンを表示します。 |
2 | ASSOC これは、拡張子をファイルタイプ(FTYPE)に関連付ける、既存の関連付けを表示する、または関連付けを削除するバッチコマンドです。 |
3 | CD このバッチコマンドは、別のディレクトリに変更を加えたり、現在のディレクトリを表示したりするのに役立ちます。 |
4 | CLS このバッチコマンドは画面をクリアします。 |
5 | コピー このバッチコマンドは、ある場所から別の場所にファイルをコピーするために使用されます。 |
6 | DEL このバッチコマンドは、ディレクトリではなくファイルを削除します。 |
7 | DIR このバッチコマンドは、ディレクトリの内容を一覧表示します。 |
8 | 日付 このバッチコマンドは、システム日付を見つけるのに役立ちます。 |
9 | エコー このバッチコマンドは、メッセージを表示するか、コマンドエコーをオンまたはオフにします。 |
10 | 出口 このバッチコマンドはDOSコンソールを終了します。 |
11 | MD このバッチコマンドは、現在の場所に新しいディレクトリを作成します。 |
12 | 移動 このバッチコマンドは、ファイルまたはディレクトリをディレクトリ間で移動します。 |
13 | 道 このバッチコマンドは、パス変数を表示または設定します。 |
14 | 一時停止 このバッチコマンドはユーザーにプロンプトを表示し、入力行が入力されるのを待ちます。 |
15 | 促す このバッチコマンドを使用して、cmd.exeプロンプトを変更またはリセットできます。 |
16 | RD このバッチコマンドはディレクトリを削除しますが、削除する前にディレクトリを空にする必要があります。 |
17 | REN ファイルとディレクトリの名前を変更します |
18 | レム このバッチコマンドは、バッチファイル内のコメントに使用され、コメントの内容が実行されないようにします。 |
19 | 開始 このバッチコマンドは、新しいウィンドウでプログラムを開始するか、ドキュメントを開きます。 |
20 | 時間 このバッチコマンドは、時間を設定または表示します。 |
21 | タイプ このバッチコマンドは、1つまたは複数のファイルの内容を出力に出力します。 |
22 | VOL このバッチコマンドは、ボリュームラベルを表示します。 |
23 | 属性 curretディレクトリ内のファイルの属性を表示または設定します |
24 | CHKDSK このバッチコマンドは、ディスクに問題がないかチェックします。 |
25 | 選択 このバッチコマンドは、オプションのリストをユーザーに提供します。 |
26 | CMD このバッチコマンドは、コマンドプロンプトの別のインスタンスを呼び出します。 |
27 | COMP このバッチコマンドは、ファイルサイズに基づいて2つのファイルを比較します。 |
28 | 変換 このバッチコマンドは、ボリュームをFAT16またはFAT32ファイルシステムからNTFSファイルシステムに変換します。 |
29 | DRIVERQUERY このバッチコマンドは、インストールされているすべてのデバイスドライバーとそのプロパティを表示します。 |
30 | 拡張 このバッチコマンドは、圧縮された.cabキャビネットファイルからファイルを抽出します。 |
31 | 見つける このバッチコマンドは、ファイルまたは入力内の文字列を検索し、一致する行を出力します。 |
32 | フォーマット このバッチコマンドは、FAT、FAT32、NTFSなどのWindowsでサポートされているファイルシステムを使用するようにディスクをフォーマットし、それによってディスクの以前のコンテンツを上書きします。 |
33 | 助けて このバッチコマンドは、Windowsが提供するコマンドのリストを表示します。 |
34 | IPCONFIG このバッチコマンドは、WindowsIP構成を表示します。接続ごとの構成とその接続の名前を表示します。 |
35 | ラベル このバッチコマンドは、ディスクラベルを追加、設定、または削除します。 |
36 | もっと このバッチコマンドは、1つまたは複数のファイルの内容を一度に1画面ずつ表示します。 |
37 | ネット 使用するコマンドに応じて、さまざまなネットワークサービスを提供します。 |
38 | PING このバッチコマンドは、ICMP / IP「エコー」パケットをネットワーク経由で指定されたアドレスに送信します。 |
39 | シャットダウン このバッチコマンドは、コンピューターをシャットダウンするか、現在のユーザーをログオフします。 |
40 | ソート このバッチコマンドは、ソースファイルから入力を受け取り、その内容をAからZまたはZからAのアルファベット順に並べ替えます。コンソールに出力を出力します。 |
41 | SUBST このバッチコマンドは、ドライブ文字をローカルフォルダーに割り当てたり、現在の割り当てを表示したり、割り当てを削除したりします。 |
42 | システム情報 このバッチコマンドは、コンピューターとそのオペレーティングシステムの構成を示します。 |
43 | TASKKILL このバッチコマンドは、1つ以上のタスクを終了します。 |
44 | タスクリスト このバッチコマンドは、タスク名とプロセスID(PID)を含むタスクを一覧表示します。 |
45 | XCOPY このバッチコマンドは、より高度な方法でファイルとディレクトリをコピーします。 |
46 | 木 このバッチコマンドは、現在のディレクトリのすべてのサブディレクトリのツリーを任意のレベルの再帰または深さで表示します。 |
47 | FC このバッチコマンドは、2つのファイル間の実際の違いを一覧表示します。 |
48 | DISKPART このバッチコマンドは、ディスクパーティションのプロパティを表示および構成します。 |
49 | 題名 このバッチコマンドは、コンソールウィンドウに表示されるタイトルを設定します。 |
50 | セットする 現在のシステムの環境変数のリストを表示します。 |
この章では、バッチファイルを作成、保存、実行、および変更する方法を学習します。
バッチファイルの作成
バッチファイルは通常、メモ帳で作成されます。したがって、最も簡単な方法は、メモ帳を開いて、スクリプトに必要なコマンドを入力することです。この演習では、メモ帳を開き、次のステートメントを入力します。
:: 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を付けることを忘れないでください。
- 「ファイルの種類」オプションを「すべてのファイル」として選択します。
- ファイル名全体を引用符「」で囲みます。
バッチファイルの実行
バッチファイルを実行する手順は次のとおりです-
Step 1 −コマンドプロンプト(cmd.exe)を開きます。
Step 2 −.batまたは.cmdファイルが保存されている場所に移動します。
Step 3 −次の図に示すようにファイルの名前を書き込み、Enterボタンを押してバッチファイルを実行します。
バッチファイルの変更
以下は、既存のバッチファイルを変更するための手順です。
Step 1 −Windowsエクスプローラーを開きます。
Step 2 −.batまたは.cmdファイルが保存されている場所に移動します。
Step 3−ファイルを右クリックし、コンテキストメニューから[編集]オプションを選択します。ファイルはメモ帳で開き、さらに編集できます。
通常、バッチファイルの最初の行は次のコマンドで構成されていることがよくあります。
ECHOコマンド
@echo off
デフォルトでは、バッチファイルは実行時にコマンドを表示します。この最初のコマンドの目的は、この表示をオフにすることです。コマンド「echooff」は、「echo off」コマンド自体を除いて、スクリプト全体の表示をオフにします。前の「アットマーク」記号「@」は、コマンドをそれ自体にも適用します。
ドキュメンテーション
多くの場合、バッチファイルには「Rem」コマンドで始まる行も含まれています。これは、コメントやドキュメントを入力する方法です。コンピューターは、Remに続く行のすべてを無視します。複雑さが増すバッチファイルの場合、コメントを付けることをお勧めします。
最初のバッチスクリプトプログラム
簡単な最初のバッチスクリプトプログラムを作成しましょう。メモ帳を開き、次のコード行を入力します。ファイルを「List.cmd」として保存します。
コードは次のことを行います-
echo offコマンドを使用して、コードの実行時にコマンドが表示されないようにします。
Remコマンドは、このバッチファイルが正確に何をするかを示すコメントを追加するために使用されます。
dirコマンドは、場所C:\ ProgramFilesの内容を取得するために使用されます。
'>'コマンドは、出力をファイル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 設定する変数の名前です。
value 変数に対して設定する必要のある値です。
/A – このスイッチは、値が本質的に数値である必要がある場合に使用されます。
次の例は、setコマンドを使用できる簡単な方法を示しています。
例
@echo off
set message=Hello World
echo %message%
上記のコードスニペットでは、messageという変数が定義され、「HelloWorld」の値で設定されています。
変数の値を表示するには、変数を%記号で囲む必要があることに注意してください。
出力
上記のコマンドは、次の出力を生成します。
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
コマンドecho%var%は、ENDLOCALステートメントの後、 '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
ここで、「備考」は追加する必要のあるコメントです。
次の例は、「::」コマンドの使用法を示しています。
例
@echo off
:: This program just displays Hello World
set message = Hello World
echo %message%
出力
上記のコマンドは、次の出力を生成します。::ステートメントの行は実行されないことに気付くでしょう。
Hello World
Note − 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 | 文字列と説明 |
---|---|
1 | 文字列を作成する 文字列は、DOSで次の方法で作成できます。 |
2 | 空の文字列 空の文字列 |
3 | 文字列補間 文字列補間は、定数、変数、リテラル、および式の組み合わせから、それらの値を文字列リテラル内に含めることにより、新しい文字列値を構築する方法です。 |
4 | 文字列の連結 set演算子を使用して、2つの文字列、または文字列と1つの文字、または2つの文字を連結できます。以下は、文字列連結の使用方法を示す簡単な例です。 |
5 | 文字列の長さ DOSスクリプトでは、文字列の長さを見つけるために定義された長さ関数はありません。同じために使用できるカスタム定義の関数があります。以下は、文字列の長さを確認するためのカスタム定義関数の例です。 |
6 | toInt 設定変数を使用して文字列として設定された変数は、設定変数を使用している/ 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として使用してアクセスでき、2番目の要素はインデックスを1として使用してアクセスできます。次の例を確認して、配列を作成、初期化、およびアクセスしてみましょう-
@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つ以上の条件と、条件が次のように決定された場合に実行される1つまたは複数のステートメントを指定する必要があります。 true、およびオプションで、条件が次のように決定された場合に実行される他のステートメント false。
S.No | 文字列と説明 |
---|---|
1 | Ifステートメント 最初の意思決定ステートメントは「if」ステートメントです。 |
2 | If / elseステートメント 次の意思決定ステートメントは、If / elseステートメントです。以下は、このステートメントの一般的な形式です。 |
3 | ネストされたIfステートメント 場合によっては、複数の「if」ステートメントを相互に埋め込む必要があります。以下は、このステートメントの一般的な形式です。 |
演算子は、特定の数学的または論理的操作を実行するようにコンパイラーに指示する記号です。
バッチスクリプトでは、以下のタイプの演算子が可能です。
- 算術演算子
- 関係演算子
- 論理演算子
- 代入演算子
- ビット演算子
算術演算子
バッチスクリプト言語は、他の言語と同様に通常の算術演算子をサポートします。以下は、使用可能な算術演算子です。
例を表示
オペレーター | 説明 | 例 |
---|---|---|
+ | 2つのオペランドの追加 | 1 +2は3を与えます |
− | 最初のオペランドから2番目のオペランドを減算します | 2 −1は1を与えます |
* | 両方のオペランドの乗算 | 2 * 2は4を与えます |
/ | 分母による分子の除算 | 3/2は1.5を与えます |
% | モジュラス演算子と整数/浮動小数点除算後の余り | 3%2は1を与えます |
関係演算子
関係演算子を使用すると、オブジェクトを比較できます。以下は、使用可能な関係演算子です。
例を表示
オペレーター | 説明 | 例 |
---|---|---|
EQU | 2つのオブジェクト間の同等性をテストします | 2 EQU2は真になります |
NEQ | 2つのオブジェクトの違いをテストします | 3 NEQ2は真になります |
LSS | 左側のオブジェクトが右側のオペランドよりも小さいかどうかを確認します | 2 LSS3は真になります |
LEQ | 左側のオブジェクトが右側のオペランド以下であるかどうかを確認します | 2 LEQ3は真になります |
GTR | 左側のオブジェクトが右側のオペランドより大きいかどうかを確認します | 3 GTR2は真になります |
GEQ | 左側のオブジェクトが右側のオペランド以上であるかどうかを確認します | 3 GEQ2は真になります |
論理演算子
論理演算子は、ブール式を評価するために使用されます。使用可能な論理演算子は次のとおりです。
バッチ言語には、AND、OR、XORなどのブール論理演算子のフルセットが装備されていますが、2進数のみが対象です。TRUEまたはFALSEの値もありません。条件に使用できる唯一の論理演算子はNOT演算子です。
例を表示
オペレーター | 説明 |
---|---|
そして | これは論理的な「and」演算子です |
または | これは論理的な「または」演算子です |
ない | これは論理的な「否定」演算子です |
代入演算子
バッチスクリプト言語は、代入演算子も提供します。使用可能な代入演算子は次のとおりです。
例を表示
オペレーター | 説明 | 例 |
---|---|---|
+ = | これにより、右のオペランドが左のオペランドに追加され、結果が左のオペランドに割り当てられます。 | / A a = 5に設定します a + = 3 出力は8になります |
-= | これにより、左のオペランドから右のオペランドが減算され、その結果が左のオペランドに割り当てられます。 | / A a = 5に設定します a- = 3 出力は2になります |
* = | これにより、右のオペランドと左のオペランドが乗算され、その結果が左のオペランドに割り当てられます。 | / A a = 5に設定します a * = 3 出力は15になります |
/ = | これにより、左のオペランドが右のオペランドで除算され、結果が左のオペランドに割り当てられます。 | / A a = 6に設定します a / = 3 出力は2になります |
%= | これは、2つのオペランドを使用してモジュラスを取り、その結果を左側のオペランドに割り当てます。 | / A a = 5に設定します a%= 3 出力は2になります |
ビット演算子
ビット単位の演算子は、バッチスクリプトでも可能です。利用可能な演算子は次のとおりです。
例を表示
オペレーター | 説明 |
---|---|
& | これはビット単位の「and」演算子です |
| | これはビット単位の「or」演算子です |
^ | これはビット単位の「xor」または排他的論理和演算子です |
以下は、これらの演算子を示す真理値表です。
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 | 1 |
The date and time in DOS Scripting have the following two basic commands for retrieving the date and time of the system.
DATE
This command gets the system date.
Syntax
DATE
Example
@echo off
echo %DATE%
Output
The current date will be displayed in the command prompt. For example,
Mon 12/28/2015
TIME
This command sets or displays the time.
Syntax
TIME
Example
@echo off
echo %TIME%
Output
The current system time will be displayed. For example,
22:06:52.87
Following are some implementations which can be used to get the date and time in different formats.
Date in Format Year-Month-Day
Example
@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
Output
The above command produces the following output.
Today is: 2015-12-30
There are three universal “files” for keyboard input, printing text on the screen and printing errors on the screen. The “Standard In” file, known as stdin, contains the input to the program/script. The “Standard Out” file, known as stdout, is used to write output for display on the screen. Finally, the “Standard Err” file, known as stderr, contains any error messages for display on the screen.
Each of these three standard files, otherwise known as the standard streams, are referenced using the numbers 0, 1, and 2. Stdin is file 0, stdout is file 1, and stderr is file 2.
Redirecting Output (Stdout and Stderr)
One common practice in batch files is sending the output of a program to a log file. The > operator sends, or redirects, stdout or stderr to another file. The following example shows how this can be done.
Dir C:\ > list.txt
In the above example, the stdout of the command Dir C:\ is redirected to the file list.txt.
If you append the number 2 to the redirection filter, then it would redirect the stderr to the file lists.txt.
Dir C:\ 2> list.txt
One can even combine the stdout and stderr streams using the file number and the ‘&’ prefix. Following is an example.
DIR C:\ > lists.txt 2>&1
Suppressing Program Output
The pseudo file NUL is used to discard any output from a program. The following example shows that the output of the command DIR is discarded by sending the output to NUL.
Dir C:\ > NUL
Stdin
To work with the Stdin, you have to use a workaround to achieve this. This can be done by redirecting the command prompt’s own stdin, called CON.
The following example shows how you can redirect the output to a file called lists.txt. After you execute the below command, the command prompt will take all the input entered by user till it gets an EOF character. Later, it sends all the input to the file lists.txt.
TYPE CON > lists.txt
By default when a command line execution is completed it should either return zero when execution succeeds or non-zero when execution fails. When a batch script returns a non-zero value after the execution fails, the non-zero value will indicate what is the error number. We will then use the error number to determine what the error is about and resolve it accordingly.
Following are the common exit code and their description.
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 |
Not enough virtual memory is available. It indicates that Windows has run out of memory. |
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. |
Error Level
The environmental variable %ERRORLEVEL% contains the return code of the last executed program or script.
By default, the way to check for the ERRORLEVEL is via the following code.
Syntax
IF %ERRORLEVEL% NEQ 0 (
DO_Something
)
It is common to use the command EXIT /B %ERRORLEVEL% at the end of the batch file to return the error codes from the batch file.
EXIT /B at the end of the batch file will stop execution of a batch file.
Use EXIT /B < exitcodes > at the end of the batch file to return custom return codes.
Environment variable %ERRORLEVEL% contains the latest errorlevel in the batch file, which is the latest error codes from the last command executed. In the batch file, it is always a good practice to use environment variables instead of constant values, since the same variable get expanded to different values on different computers.
Let’s look at a quick example on how to check for error codes from a batch file.
Example
Let’s assume we have a batch file called Find.cmd which has the following code. In the code, we have clearly mentioned that we if don’t find the file called lists.txt then we should set the errorlevel to 7. Similarly, if we see that the variable userprofile is not defined then we should set the errorlevel code to 9.
if not exist c:\lists.txt exit 7
if not defined userprofile exit 9
exit 0
Let’s assume we have another file called App.cmd that calls Find.cmd first. Now, if the Find.cmd returns an error wherein it sets the errorlevel to greater than 0 then it would exit the program. In the following batch file, after calling the Find.cnd find, it actually checks to see if the errorlevel is greater than 0.
Call Find.cmd
if errorlevel gtr 0 exit
echo “Successful completion”
Output
In the above program, we can have the following scenarios as the output −
If the file c:\lists.txt does not exist, then nothing will be displayed in the console output.
If the variable userprofile does not exist, then nothing will be displayed in the console output.
If both of the above condition passes then the string “Successful completion” will be displayed in the command prompt.
Loops
In the decision making chapter, we have seen statements which have been executed one after the other in a sequential manner. Additionally, implementations can also be done in Batch Script to alter the flow of control in a program’s logic. They are then classified into flow of control statements.
S.No | Loops & Description |
---|---|
1 | While Statement Implementation There is no direct while statement available in Batch Script but we can do an implementation of this loop very easily by using the if statement and labels. |
2 | For Statement - List Implementations The "FOR" construct offers looping capabilities for batch files. Following is the common construct of the ‘for’ statement for working with a list of values. |
3 | Looping through Ranges The ‘for’ statement also has the ability to move through a range of values. Following is the general form of the statement. |
4 | Classic for Loop Implementation Following is the classic ‘for’ statement which is available in most programming languages. |
Looping through Command Line Arguments
The ‘for’ statement can also be used for checking command line arguments. The following example shows how the ‘for’ statement can be used to loop through the command line arguments.
Example
@ECHO OFF
:Loop
IF "%1"=="" GOTO completed
FOR %%F IN (%1) DO echo %%F
SHIFT
GOTO Loop
:completed
Output
Let’s assume that our above code is stored in a file called Test.bat. The above command will produce the following output if the batch file passes the command line arguments of 1,2 and 3 as Test.bat 1 2 3.
1
2
3
S.No | Loops & Description |
---|---|
1 | Break Statement Implementation The break statement is used to alter the flow of control inside loops within any programming language. The break statement is normally used in looping constructs and is used to cause immediate termination of the innermost enclosing loop. |
A function is a set of statements organized together to perform a specific task. In batch scripts, a similar approach is adopted to group logical statements together to form a function.
As like any other languages, functions in Batch Script follows the same procedure −
Function Declaration − It tells the compiler about a function's name, return type, and parameters.
Function Definition − It provides the actual body of the function.
Function Definition
In Batch Script, a function is defined by using the label statement. When a function is newly defined, it may take one or several values as input 'parameters' to the function, process the functions in the main body, and pass back the values to the functions as output 'return types'.
すべての関数には、関数が実行するタスクを説明する関数名があります。関数を使用するには、その関数をその名前で「呼び出し」、関数のパラメーターのタイプに一致する入力値(引数と呼ばれる)を渡します。
以下は、単純な関数の構文です。
: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 | 機能と説明 |
---|---|
1 | 関数の呼び出し 関数は、callコマンドを使用してバッチスクリプトで呼び出されます。 |
2 | パラメータ付きの関数 関数は、関数が呼び出されたときにパラメーターを渡すだけでパラメーターを操作できます。 |
3 | 戻り値のある関数 関数は、変数名を渡すだけで戻り値を処理できます |
4 | 関数内のローカル変数 関数内のローカル変数を使用して、名前の競合を回避し、変数の変更を関数に対してローカルに保つことができます。 |
5 | 再帰関数 変数の変更を関数に対してローカルに保ち、呼び出し元には見えないようにすることで、関数の本体を完全にカプセル化する機能。 |
6 | ファイルI / O バッチスクリプトでは、任意のプログラミング言語で期待される通常のファイルI / O操作を実行できます。 |
7 | ファイルの作成 新しいファイルの作成は、リダイレクトフィルターの助けを借りて行われます>。このフィルターを使用して、出力をファイルにリダイレクトできます。 |
8 | ファイルへの書き込み ファイルへのコンテンツの書き込みも、リダイレクトフィルターの助けを借りて行われます>。このフィルターを使用して、出力をファイルにリダイレクトできます。 |
9 | ファイルへの追加 ファイルへのコンテンツの書き込みも、二重リダイレクトフィルター>>の助けを借りて行われます。このフィルターを使用して、任意の出力をファイルに追加できます。 |
10 | ファイルからの読み取り バッチスクリプトでのファイルの読み取りは、FORループコマンドを使用して、読み取る必要のあるファイルで定義されている各行を通過することによって行われます。 |
11 | ファイルの削除 ファイルを削除するために、バッチスクリプトはDELコマンドを提供します。 |
12 | ファイルの名前変更 ファイルの名前を変更するために、バッチスクリプトはRENまたはRENAMEコマンドを提供します。 |
13 | ファイルの移動 ファイルを移動するために、バッチスクリプトはMOVEコマンドを提供します。 |
14 | バッチファイル–パイプ パイプ演算子(|)は、あるコマンドの出力(デフォルトではSTDOUT)を受け取り、それを別のコマンドの入力(デフォルトではSTDIN)に送ります。 |
15 | バッチファイル–入力 バッチファイルを実行すると、コマンドラインパラメータを渡すオプションが提供されます。コマンドラインパラメータは、プログラム内で読み取ってさらに処理することができます。 |
16 | SHIFT演算子の使用 コマンドライン引数の制限の1つは、%9までの引数のみを受け入れることができることです。この制限の例を見てみましょう。 |
17 | フォルダー バッチスクリプトでは、任意のプログラミング言語で期待される通常のフォルダベースの操作を実行できます。 |
18 | フォルダの作成 フォルダの作成は、MD(ディレクトリの作成)コマンドを使用して実行されます。 |
19 | フォルダーの内容の一覧表示 フォルダの内容の一覧表示は、dirコマンドを使用して実行できます。このコマンドを使用すると、現在のディレクトリで使用可能なファイルとディレクトリを確認できます。 |
20 | フォルダの削除 フォルダを削除するために、バッチスクリプトはDELコマンドを提供します。 |
21 | フォルダの名前を変更する フォルダの名前を変更するために、バッチスクリプトはRENまたはRENAMEコマンドを提供します。 |
22 | フォルダの移動 フォルダを移動するために、バッチスクリプトはMOVEコマンドを提供します。 |
この章では、バッチスクリプトに関連するさまざまなプロセスについて説明します。
実行中のプロセスのリストの表示
バッチスクリプトでは、TASKLISTコマンドを使用して、システム内で現在実行中のプロセスのリストを取得できます。
構文
TASKLIST [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter]
[/FO format] [/NH]
S.No. | オプションと説明 |
---|---|
1.1。 | /S system 接続するリモートシステムを指定します |
2.2。 | /U [domain\]user コマンドを実行するユーザーコンテキストを指定します。 |
3.3。 | /P [password] 指定されたユーザーコンテキストのパスワードを指定します。省略した場合は入力を求めます。 |
4.4。 | /M [module] 指定されたexe / dll名を現在使用しているすべてのタスクを一覧表示します。モジュール名が指定されていない場合、ロードされているすべてのモジュールが表示されます。 |
5.5。 | /SVC 各プロセスでホストされているサービスを表示します。 |
6.6。 | /V 詳細なタスク情報を表示します。 |
7。 | /FI filter フィルタで指定された特定の基準に一致するタスクのセットを表示します。 |
8.8。 | /FO format 出力形式を指定します。有効な値:「TABLE」、「LIST」、「CSV」。 |
9.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]
S.No. | オプションと説明 |
---|---|
1.1。 | /S system 接続するリモートシステムを指定します |
2.2。 | /U [domain\]user コマンドを実行するユーザーコンテキストを指定します。 |
3.3。 | /P [password] 指定されたユーザーコンテキストのパスワードを指定します。省略した場合は入力を求めます。 |
4.4。 | /FI FilterName フィルタを適用して、一連のタスクを選択します。「*」の使用を許可します。例 imagename eq acme *追加情報と例については、以下のフィルターを参照してください。 |
5.5。 | /PID processID 終了するプロセスのPIDを指定します。TaskListを使用してPIDを取得します。 |
6.6。 | /IM ImageName 終了するプロセスのイメージ名を指定します。ワイルドカード「*」を使用して、すべてのタスクまたはイメージ名を指定できます。 |
7。 | /T 指定されたプロセスと、それによって開始された子プロセスを終了します。 |
8.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 −コマンドに渡されるパラメーター。
S.No. | オプションと説明 |
---|---|
1.1。 | /MIN 最小化された開始ウィンドウ |
2.2。 | /MAX 開始ウィンドウが最大化されました。 |
3.3。 | /LOW IDLE優先度クラスを使用します。 |
4.4。 | /NORMAL NORMAL優先度クラスを使用します。 |
5.5。 | /ABOVENORMAL ABOVENORMAL優先度クラスを使用します。 |
6.6。 | /BELOWNORMAL BELOWNORMAL優先度クラスを使用します。 |
7。 | /HIGH HIGH優先度クラスを使用します。 |
8.8。 | /REALTIME REALTIME優先度クラスを使用します。 |
例
START "Test Batch Script" /Min test.bat
上記のコマンドは、新しいウィンドウでバッチスクリプトtest.batを実行します。ウィンドウは最小化モードで起動し、「テストバッチスクリプト」というタイトルも付けられます。
START "" "C:\Program Files\Microsoft Office\Winword.exe" "D:\test\TESTA.txt"
上記のコマンドは、実際には別のプロセスでMicrosoft Wordを実行してから、MSWordでファイルTESTA.txtを開きます。
エイリアスとは、既存のコマンドのショートカットまたはキーワードを作成することを意味します。以下のコマンドを実行したいとします。これは、ディレクトリリストに必要なすべての詳細を表示しないように/ wオプションを指定したディレクトリリストコマンドにすぎません。
Dir /w
このコマンドへのショートカットを次のように作成するとします。
dw = dir /w
実行したいとき dir /w コマンド、私たちは単に単語を入力することができます dw。'dw'という単語は、コマンドDir / wのエイリアスになりました。
エイリアスの作成
エイリアスは、 doskey コマンド。
構文
DOSKEY [options] [macroname=[text]]
ここで
macroname −マクロの短い名前。
text −呼び出したいコマンド。
以下は、DOSKEYコマンドに提示できるオプションの説明です。
S.No. | オプションと説明 |
---|---|
1.1。 | /REINSTALL Doskeyの新しいコピーをインストールします |
2.2。 | /LISTSIZE = size コマンド履歴バッファのサイズを設定します。 |
3.3。 | /MACROS すべてのDoskeyマクロを表示します。 |
4.4。 | /MACROS:ALL Doskeyマクロを持つすべての実行可能ファイルのすべてのDoskeyマクロを表示します。 |
5.5。 | /MACROS:exename 指定された実行可能ファイルのすべてのDoskeyマクロを表示します。 |
6.6。 | /HISTORY メモリに保存されているすべてのコマンドを表示します。 |
7。 | /INSERT 入力した新しいテキストが古いテキストに挿入されることを指定します。 |
8.8。 | /OVERSTRIKE 新しいテキストが古いテキストを上書きすることを指定します。 |
9.9。 | /EXENAME = exename 実行可能ファイルを指定します。 |
10.10。 | /MACROFILE = filename インストールするマクロのファイルを指定します。 |
11.11。 | macroname 作成するマクロの名前を指定します。 |
12.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を追加、削除、および並べ替えます。
デバイスセットアップクラスの上部フィルタードライバーと下部フィルタードライバーを変更します。
サードパーティのドライバーパッケージをドライバーストアに追加および削除します。
DevCon(DevCon.exe)は、デスクトップアプリ用のWDK、Visual Studio、およびWindowsSDKをインストールするときに含まれます。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検索
DevCon FindAll
デバイスを操作したり、その構成を変更したりするには、次のコマンドを使用します-
DevConを有効にする
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コマンドでPrintersetupクラスを指定することにより、コンピューター上のすべてのプリンターデバイスを有効にします。このコマンドには、有効化を有効にする必要がある場合にシステムを再起動する/ rパラメーターが含まれています。
devcon /r enable = Printer
次のコマンドは、DevConインストール操作を使用して、ローカルコンピューターにキーボードデバイスをインストールします。このコマンドには、デバイスのINFファイル(keyboard.inf)へのフルパスとハードウェアID(* PNP030b)が含まれています。
devcon /r install c:\windows\inf\keyboard.inf *PNP030b
次のコマンドは、コンピューターをスキャンして新しいデバイスを探します。
devcon scan
次のコマンドは、コンピューターを再スキャンして新しいデバイスを探します。
devcon rescan
レジストリは、Windowsシステムの重要な要素の1つです。これには、オペレーティングシステムのさまざまな側面に関する多くの情報が含まれています。Windowsシステムにインストールされているほとんどすべてのアプリケーションは、何らかの形でレジストリと対話します。
レジストリには、キーと値の2つの基本要素が含まれています。 Registry keys フォルダに似たコンテナオブジェクトです。 Registry valuesファイルに似た非コンテナオブジェクトです。キーには、値または追加のキーを含めることができます。キーは、Windowsのパス名と同様の構文で参照され、バックスラッシュを使用して階層のレベルを示します。
この章では、値のクエリ、レジストリからの値の追加、削除、編集などのさまざまな機能について説明します。
S.No | レジストリの種類と説明 |
---|---|
1 | レジストリからの読み取り レジストリからの読み取りは、REGQUERYコマンドを介して行われます。 |
2 | レジストリへの追加 レジストリへの追加は、REGADDコマンドを介して行われます。 |
3 | レジストリからの削除 レジストリからの削除は、REGDELコマンドを介して行われます。 |
4 | レジストリキーのコピー レジストリからのコピーは、REGCOPYコマンドを介して実行されます。 |
5 | レジストリキーの比較 レジストリキーの比較は、REGCOMPAREコマンドを介して行われます。 |
バッチスクリプトには、ネットワーク設定を操作する機能があります。NETコマンドは、ネットワークまたはネットワーク設定を更新、修正、または表示するために使用されます。この章では、netコマンドで使用できるさまざまなオプションについて説明します。
S.No | NETコマンドと説明 |
---|---|
1 | ネットアカウント コンピューターの現在のパスワードとログオンの制限を表示します。 |
2 | ネット構成 現在のサーバーまたはワークグループの設定を表示します。 |
3 | ネットコンピュータ Windowsドメインコントローラーに接続されているコンピューターを追加または削除します。 |
4 | ネットユーザー このコマンドは、次の目的で使用できます。 特定のユーザーアカウントの詳細を表示します。 |
5 | ネットストップ/スタート このコマンドは、特定のサービスを停止および開始するために使用されます。 |
6 | ネット統計 ワークステーションまたはサーバーのネットワーク統計を表示します。 |
7 | ネット使用 コンピューターを共有リソースに接続または切断するか、接続に関する情報を表示します。 |
印刷は、NETPRINTコマンドを介してバッチスクリプト内から制御することもできます。
構文
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.EXEPRINTUI.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に送信することにより、プリンターが実際に存在するかどうかを確認するために使用されます。
多くの場合、バッチファイルの実行中に問題が発生する可能性があり、ほとんどの場合、バッチファイル自体の問題を特定するために、何らかの方法でバッチファイルをデバッグする必要があります。以下は、バッチスクリプトファイルのデバッグに役立ついくつかの手法です。
エラーメッセージ
メッセージの送信元を見つけるには、次の手順に従います-
Step 1 − @ECHO OFFラインをREMアウトします。つまり、REM @ECHOOFFまたは:: @ ECHOOFFです。
Step 2 − Run the batch file with the required command line parameters, redirecting all output to a log file for later comparison.
test.bat > batch.log 2>&1
Step 3 − Search the file batch.log for the error messages
Step 4 − Check the previous line for any unexpected or invalid command, command line switch(es) or value(s); pay special attention to the values of any environment variables used in the command.
Step 5 − Correct the error and repeat this process until all error messages have disappeared.
Complex Command Lines
Another common source of errors are incorrectly redirected commands, like for example "nested" FIND or FINDSTR commands with incorrect search strings, sometimes within a FOR /F loop.
To check the validity of these complex commands, follow these steps −
Step 1 − Insert "command check lines" just before a line which uses the complex command set.
Following is an example wherein the ECHO command is inserted to mark where the output of the first TYPE command ends and the next one starts.
TYPE %Temp%.\apipaorg.reg
ECHO.================================================ TYPE %Temp%.\apipaorg.reg
| FIND
"[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"
Step 2 − Follow the procedure to find error message sources described above.
Step 3 − Pay special attention to the output of the "simplified" command lines: Is the output of the expected format? Is the "token" value or position as expected?
Subroutines
Subroutines generating error messages pose an extra "challenge" in finding the cause of the error, as they may be called multiple times in the same batch file.
To help find out what causes the incorrect call to the subroutine, follow these steps −
Step 1 − Add and reset a counter variable at the beginning of the script −
SET Counter = 0
Step 2 − Increment the counter each time the subroutine is called, by inserting the following line at the beginning of the subroutine
SET /A Counter+=1
Step 3 − Insert another line right after the counter increment, containing only the SET command; this will list all environment variables and their values.
Step 4 − Follow the procedure to find error message sources described above.
Windows Versions
If you intend to distribute your batch files to other computers that may or may not run the same Windows version, you will need to test your batch files in as many Windows versions as possible.
The following example shows how to check for various operating system versions to check the relevant windows versions.
@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
Logging in is possible in Batch Script by using the redirection command.
Syntax
test.bat > testlog.txt 2> testerrors.txt
Example
Create a file called test.bat and enter the following command in the file.
net statistics /Server
The above command has an error because the option to the net statistics command is given in the wrong way.
Output
If the command with the above test.bat file is run as
test.bat > testlog.txt 2> testerrors.txt
And you open the file testerrors.txt, you will see the following error.
The option /SERVER is unknown.
The syntax of this command is −
NET STATISTICS
[WORKSTATION | SERVER]
More help is available by typing NET HELPMSG 3506.
If you open the file called testlog.txt, it will show you a log of what commands were executed.
C:\tp>net statistics /Server