Windows - バッチ - ファイル - テキストファイルへの出力

 
1. 概要
2. 文字列をエコーさせるバッチファイルを作成する
3. 右端が数字の行を出力

1. 概要

 さて、やろうとしているのは、バッチファイルを作成するバッチファイルを作ること。  ぶはは、なんか説明が難しいですが・・・。

2. 文字列をエコーさせるバッチファイルを作成する

 百聞は一見に如かず。  下記の内容で sample01.bat を作成して

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION


SET FILE=sample02.bat

ECHO @ECHO OFF>%FILE%
ECHO SET MESSAGE=ほげほげ>>%FILE%
ECHO ECHO %MESSAGE%>>%FILE%
 実行すると sample02.bat という名前で下記の内容のバッチファイルが作成されます。

@ECHO OFF
SET MESSAGE=ほげほげ
ECHO ほげほげ
 これを実行すると

ほげほげ
 つまり

ECHO 文字列>ファイル名
 とするとファイル名で指定したファイルを新規作成して、文字列を出力するわけです。

ECHO 文字列>>ファイル名
 とすれば、ファイル名に相当するファイルがなければ新規に作成、あれば追加で文字列を出力します。

3. 右端が数字の行を出力

 本項は「バッチファイルで行末が数字の行をファイル出力する方法 | 読書とプログラミングを中心とした覚書ブログ」を参考にさせていただきました。  前項を踏まえて、数字を変数にいれて出力しようとするバッチファイルを作成しようとすると悩ましい問題が発生します。  下記の内容で sample03.bat を作成して

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION


SET FILE=sample04.bat
SET NUM=1

ECHO @ECHO OFF>%FILE%
ECHO SET NUMBER=%NUM%>>%FILE%
ECHO ECHO %NUMBER%>>%FILE%
 これを実行すると sample04.bat は作成されますが、中身は

@ECHO OFF
SET NUMBER=
ECHO
 となってしまいます。

ECHO 文字列...数字>ファイル名
ECHO 文字列...数字>>ファイル名
 と「>」「>>」などのリダイレクト記号のすぐ左の数字は、ファイル番号(1 が標準出力、2 が標準エラー、...)と解釈されるので、文字列としては出力されないのです。  そこで参考サイトの知識が役に立ちます。  数字の前に「^」(参考サイトではキャレットと呼んでいます)をいれると、ファイル番号と解釈されないようです。  そこで、下記の内容で sample05.bat を作成して

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET FILE=sample06.bat
SET NUM=1

ECHO @ECHO OFF>%FILE%
ECHO SET NUMBER=^%NUM%>>%FILE%
ECHO ECHO %%NUMBER%%>>%FILE%
 これを実行すると sample06.bat が作成され、中身は

@ECHO OFF
SET NUMBER=1
ECHO %NUMBER%
 となります。  sample05.bat の 9行目も一工夫で、% をエコーさせるには %% と重ねる必要があります。  sample06.bat を実行すると

1
 と出力されます。