トップホーム倉庫バッチファイル :batchfile.html;バッチファイルのメモ

バッチファイルのメモ
windowsXP home editionのコマンドプロンプトで動作確認してます。
バージョンによっては使えないコマンド等、差異があります。
あと、ここに記載されたバッチファイルを試す場合は自己責任で。

1.作り方概要
2.メッセージの出力
3.データの入力
4.四則演算
雑記
関数風バッチファイル

1.作り方概要
テキストエディタで作ります。
例えば、メモ帳を使って作ってみます。
メモ帳を起動して、
@echo off
ver
pause
と入力して、
名前を付けて保存します。
このときに、ファイルの種類を「すべてのファイル」に変えて、
拡張子をbatにして保存します。
できたファイルを実行してみましょう。
私の環境では、

Microsoft Windows XP [Version 5.1.2600]
続行するには何かキーを押してください . . .

と出力されました。
何かキーを押すと終了するはずです。

と、いうふうに作っていきます。

2.メッセージの出力
ディスプレイに
  おなかが減っては戦はできぬ。
と、出力させてみましょう。

メッセージの出力には、echoを使います。
@echo off
echo おなかが減っては戦はできぬ。
pause

では、次の文章を出力させてみましょう。
===============
がんばれ自分。

がんばった自分。
===============
空白行を出力するにはecho.を使います。
@echo off
echo がんばれ自分。
echo.
echo がんばった自分。
pause

echoを使うときに注意する文字があります。
|
<
>
これらの文字を出力させるときには、その文字の前に^を付けます。
^|
^<
^>
というふうに書きます。
^自体を出力させるときは、二つ続けて^^と書きます。
また、バッチファイルで%を出力させる場合、%%と二つ続けて書きます。
↓注意する文字を出力させるバッチファイル
@echo off
echo ^|
echo ^<
echo ^>
echo ^^
echo %%
pause


補足:
・pauseは一時停止です。pauseを書かずに実行すると止まらずに終了。
・@echo offを省くと実行コマンドが表示される。
・@echo offの@をとってecho offとするとecho offのコマンドが表示される。


3.データの入力
set /p 環境変数="入力を促すメッセージ"
を使います。
例:
@echo off
set /p data="何か書いてエンターキーを押してください:"
echo 入力された文字列は、
echo %data%
echo ですね。
pause
入力された文字列が
dataという名前の環境変数に入ります。怪魚
環境変数の値を表示するには%環境変数%と書きます。
なお、何も入力せずにエンターキーを押した場合、
dataには何も入らないので(data自体、定義されない)、
echo %data%はecho となり、
echoの状態が表示されます。
そのことを確かめるには、
@echo off
set /p data="何も書かずにエンターキーを押してください:"
echo 入力された文字列は、
set data
echo ですね。
pause
set 環境変数
で、その環境変数の値を参照します。(%は付けない)
環境変数 data が定義されていません
と表示されると思います。

4.四則演算
set /a 環境変数=演算式
を使います。
整数型の計算となります。
+:足し算
-:引き算
*:掛け算
/:割り算(小数切捨て)
%%:割り算の余り(mod)

例えば、
5/2=2
5%%2=1
  2_←/
2)5
  4_
  1 ←%%
例:aとbを入力して四則演算の結果を出力する
@echo off
set /p a="a="
set /p b="b="
echo 入力されたのはa=%a%とb=%b%です。
echo a[演算子]bを計算します。

set /a ans=a+b
echo 和(a+b)は%ans%

set /a ans=a-b
echo 差(a-b)は%ans%

set /a ans=a*b
echo 積(a*b)は%ans%

set /a ans=a/b
echo 商(a/b)は%ans%

set /a ans=a%%b
echo 余り(a%%b)は%ans%

pause

・まあいろいろと
:カレンダー
@echo off
echo %date%[%time%]

for /f "tokens=1,2 delims=/" %%i in ("%date%") do (set /a y=%%i & set /a m=%%j)

set /a last_day=31
if %m%==4 set /a last_day-=1
if %m%==6 set /a last_day-=1
if %m%==9 set /a last_day-=1
if %m%==11 set /a last_day-=1

if not %m%==2 goto not2m
set /a uruu = y %% 400
if %uruu% == 0 (set /a uruu=1 & goto uruu_end)
set /a uruu = y %% 100
if %uruu%==0 (set /a uruu=0 & goto uruu_end)
set /a uruu = y %% 4
if %uruu%==0 (set /a uruu=1 & goto uruu_end)
set /a uruu=0
:uruu_end
if %uruu%==0 set /a last_day=28
if %uruu%==1 set /a last_day=29
:not2m

set/a m-=2
if /i %m% lss 1 (set/a m+=12 & set/a y-=1)

set/a c=y/100
set/a b=y%%100

set /a tuitati=((26*m -2)/10 +1 +b +b/4 +5*c+c/4) %%7

echo 日 月 火 水 木 金 土

rem ↓###を半角スペース3個に変える
set weeknbsp=###
set /a i=1
:brankset
if %tuitati%==%i% goto branksetend
set weeknbsp=%weeknbsp%###
set /a i+=1
goto brankset
:branksetend

set /a i=tuitati
set /a j=1

set moto=%weeknbsp%
:weekset
if /i %j% lss 10 (set moto=%moto% %j% ) else (set moto=%moto%%j% )
set /a i+=1
if %i%==7 (echo %moto% & set /a i=0 & set moto=)
if %j%==%last_day% (echo %moto% & goto weeksetend)
set /a j+=1
goto weekset
:weeksetend

pause



←戻る