1. ホーム
  2. スクリプト・コラム
  3. DOS/BAT

cmdのバッチ処理におけるset /a、set /pの違いについて

2022-02-10 12:20:05

SETコマンドに2つの新しいコマンドラインスイッチが追加されました。

SET /A式
SET /P variable=[promptString]である。

Aコマンドラインスイッチは、等号の右側の文字列を評価する数値式として指定します。式評価器は単純で、優先順位の高い順に以下の操作をサポートしています。

() - グループ化
! ~ 単項演算子
* / % - 算術演算子
+ - - 算術演算子
<< >> - 論理シフト
- ビット単位で"with"
^ - 位置によって "different"
| - "or" ポジション別
= *= /= %= += -= - 割り当て
&= ^= |= <= >>= - 式セパレータ

論理演算子や丸め演算子を使用する場合は、式の文字列を引用符で展開する必要があります。
式中の非数値文字列キーは、使用前に値が数値に変換された環境変数名として使用されます。
環境変数名が指定されているが、現在の環境では定義されていない場合、その値はゼロに設定される。
これにより、環境変数の値を取得するために%記号を入力する代わりに、その値を用いて計算を行うことができます。
SET /A がコマンド スクリプト以外のコマンド ラインで実行された場合、その式の最後の値が表示されます。
この代入演算子は、代入演算子の左側に環境変数名を必要とします。
数値は、0xを先頭に持つ16進数と、0を先頭に持つ8進数以外は10進数である。
したがって、0x12は18と022と同じである。8進法の計算式は混乱しやすいので注意しましょう。8と9は有効な8進数ではないので、08と09は無効な数字です。

P コマンドラインスイッチを使用すると、変数値をユーザーが入力した行に設定することができます。入力行を読み込む前に、指定された promptString が表示されます。 promptString は、空でもかまいません。

例1.

@echo off
set /p POP=Please enter the number of pings.
ping /n %POP% 429006.com
pause.

ここで、POP は以下の ping のようなコマンドで使用できる関数です。

例2.

@echo off
set a=1
:start
echo %a%
ping 172.19.5.%a% -w 1 -n 1|find /i "Lost = 1"&&set c=1|||set c=0
if %c%==0 (echo 172.19.5.%a% >>IP.txt)
set /a a=%a%+1
if %a%==255 exit
goto :start

setを使った例を示しますので、ご覧ください。
172.19.5.1 から 172.19.5.255 までそれぞれ ping を打ち、ping を打てる IP を ip.txt に書き込んでいます。

set a= を set /a a= に変更してみてください。
あるいはその逆で、まだ動くかどうか......。\

/pは入力するためのものです
/a は、変数が算術文字列と等しいことを指定するものです
引数なしは、変数を通常の文字列と等しくすることです。

例3.

@echo off
set /p b=Enter a number.
echo %b%
set /a a=2*%b%
echo %b%+%b%=%a%
pause>nul

set /a 数式計算を行う
set /p ユーザーの入力を求めるプロンプト
例えば、/p a=Waiting for POP input と設定します。と設定すると、ウィンドウに "Waiting for POP input:" と表示されるので、次のように入力した後、Enter キーを押します。