プロが教えるわが家の防犯対策術!

今回、皆様の助けを頂き、DOSバッチを作成して仕事をやることができました。
感謝します。しかしながら、入出力に関して、もう少し理解したいと思います。
特に、外のファイルの指定行の内容を読み出すことはできないでしょうか?

外のファイルの最初の行を読み出す
@echo off
set /p abc=< c:\mylog.log
echo %abc%

外のファイルの最後の行を読み出す
@echo off
FOR /F "delims= " %%a IN (c:\mylog.log) DO (set abc=%%a)
echo %abc%

-----------
DOSのHelpを調べてみましたが、
For のパラメータについて、よく理解できていません。
パラメータをうまく使えば、ファイルの指定行を読み出せる気がするのですが、
調べ切れていません。

宜しくお願いします。

A 回答 (1件)

こんにちは。

前回も回答したM_Satoです。
前回と同じような内容になりますが……

内部コマンドだけで処理せず、外部コマンドとしてsed.exeを導入すれば、テキスト・ファイルの処理に自由度が出てきます。

●使用例
1)1行目を読み出す場合
c:\sed -ne "1p" c:\mylog.log > oneline.txt

2)5行目を読み出す場合
c:\sed -ne "5p" c:\mylog.log > oneline.txt

3)最後の行を読み出す場合
c:\sed -ne "$p" c:\mylog.log > oneline.txt

●sed のオプションの説明
-n ……標準出力を抑制する(sedは入力ファイルを1行ずつ読んで(編集後に)標準出力に吐き出します。このオプションをつけると、出力コマンドがある場合に限り出力します)
-e ……うしろに記述されているコマンドを実行する。
-f ……うしろに記述されているファイルの内容をスクリプトとして実行する。

●コマンドの説明
1p……1行目を出力する
5p……5行目を出力
$p……最後の行を出力する
行数はバッチファイルの引数%1で与えてもかまいません。

●出力方法
いずれもoneline.txtに1行だけ出力しますから、あとは
type oneline.txt
として画面に出力してもいいし、
下記のようにいったん変数に取り込んでから出力してもいいでしょう。
set /p abc=<oneline.txt
echo %abc%

●導入
sed.exeはストリームエディタというDOSのソフトで、下記からダウンロードして解凍したあと、sed.exeだけをc:\に置いてください。特にインストール作業は必要ありません。
http://www.vector.co.jp/soft/dos/util/se000880.h …
(sed.exeはさまざまな開発者によって発表されており、いろいろな版がありますが、上記のものが使いやすいと思います)

なお、入力ファイル名は旧DOSの規則に従って半角換算で8文字以内+拡張子3文字以内にしてください。

この回答への補足

sed.exeの詳細な説明、ありがとうございます。
外部コマンドとして、こういうものがあることを、初めて知りました。感謝します。
しかしながら、DOSコマンドのFORは、まだ、使えると言う気がします。
小生が、理解できていないだけのことのように感じています。
目的を達成することよりは、むしろ、FORを使いこなせるようになりたい、と言うのが正直なところです。

宜しくお願いします。

補足日時:2012/05/21 23:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!