コマンドプロンプトでファイルの内容を表示、編集する方法

BASH,bat,バッチ

テキストファイルをコマンドスクリプトで表示、編集する方法を解説します。

前回、コマンドスクリプトでファイルの作成や文字の追記について解説(リンクはこちら)しましたので、今回はバッチファイルで内容の表示や編集方法について解説していきます。

この記事が参考になる方

・バッチファイルでファイルの編集を行いたい方

・コマンドプロンプトでファイルの内容を確認したい方

テキストファイルの内容を表示

コマンドスクリプトにテキストファイル

下記のテキストファイルを表示させます

ファイル名:ex.txt

私は太郎です。

毎月、暮らしに役立つ情報を発信しているものです。

I am taro.

I am from kyoto, but I live in niigata.

まず単純にtypeコマンドやmoreコマンドで表示させます。

type ex.txt
more ex.txt

コマンドスクリプトの表示は下記のとおりになりました。

特定の文字を消して表示する方法

ここで少し表示方法を応用します。forコマンドとtokensとdelimsを使って、表示方法を変えていきます。下記のコードを実行して、特定の文字を消します。ファイルは前節で使用した「ex.txt」ファイルを使用します。

@echo off
for /f "tokens=1-7 delims=.," %%a in (ex.txt) do (echo %%a %%c %%e)

コマンドスクリプトの表示が変わりましたね。

下記のとおりの「., but I live in niigata.」が消された結果になりました。

ex.txtex2.bat消えた文字
私は太郎です。毎月、暮らしに役立つ情報を発信しているものです。I am taro.I am from kyoto, but I live in niigata.私は太郎です。毎月、暮らしに役立つ情報を発信しているものです。I am taroI am from kyoto., but I live in niigata.

1つずつ分解して解説します。少々長くなりますが、頑張りましょう。

解説するコード
  • for /f
  • tokens
  • delims
  • %%a in(ex.txt)
  • do (echo %%a %%c %%e)for /f
  • tokens
  • delims
  • %%a in(ex.txt)
  • do (echo %%a %%c %%e)

for /fの解説

for /fは繰り返し作業を1列行う内容です。forコマンドの詳しい解説は下記から参照してみてください。オプション/fを使うことで、繰り返し作業の機能であるforコマンドが少し機能を変えています。

tokensの解説

次にtokensオプションは「tokens=」の後に取り出したい文字列の番号を記入します。ここでは後ろのほうを削除したいため「tokens=1-7」と書きました。もし、1番目と3番目の文字が欲しい場合は「tokens=1,3」と記載します。

「tokens」オプションをつけると、「%%b」、「%%c」…の変数に代入されます。for文では「%%a」を指定しているので、アルファベット順の「%%b」、「%%c」が自動的に使用されます。「%%a」ではなく「%%i」を指定した場合だと、2単語以下には「%%j」、「%%k」…が使われます。

delimsの解説

delimsオプションは文字を削除する機能があります。今回のコードの場合、「,」と「.」がの文字が削除されます。

空白を削除したい場合は「 」と記載し、スペースを入れると空白がなくなります。

%%a in(ex.txt)の解説

変数aをテキストファイルのexの内容を入れるという意味です。doの後のコマンド処理によって、変数aは使われます。「%%変数 in ()」はforコマンドのセットで使われます。

do (echo %%a %%c %%e)の解説

doはforコマンドとセットですので、特に解説ありません。強いて言えば、doは和訳すると「〜をする」ですので、()の内容を処理すると訳せますね。

echoの後にそれぞれの変数が表示されます。

tokensオプションによって、1から7までの変数が設定されました。1から7までの変数を設定しますので、aが1、bが2、cが3、dが4…という順番で変数にex.txt.データの内容が表示します。

テキストファイルの内容を編集

最後にテキストファイルの編集方法について解説します。テキストファイルを編集する方法は少し複雑です。

説明する前に実践してみます。下記のコードを用意して、前節で使用したex.txtのテキストファイルを編集します。

@echo off
if exist ex3.txt del ex3.txt
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in (ex.txt) do (
 set hensu=%%a
 echo !hensu:taro=hanako! >> ex3.txt)
endlocal

このバッチを使用した結果はこちら。新たにex3.txtファイルが作成され、赤線の部分が変更されました。「I am taro」が「I am hanako」に内容が書き換わりました。

各行の解説をします。このコードのポイントは !hensu:taro=hanako!です。

@echo offの貝瀬宇t

@はコマンド処理を表示しないという意味です。

echo offはコマンドの処理を表示しないと意味。

@+echo offで以下のコマンド処理を表示しないという意味になります。

詳しくは別記事で解説してますので、こちらの記事を参照ください。

if exist ex3.txt del ex3.txtの解説

このコードの意味は、「もし、ex3.txtファイルがあれば、ex3.txtを削除する」です。

これからex3.txtファイルを作成しますので、ex3.txtがあると、エラーを引き起こします。

エラー防止のために、ex3.txtファイルの存在を確認し、ex3.txtがあれば削除する命令をしています。

setlocal ENABLEDELAYEDEXPANSION endlocalの解説

setlocalとendlocalはローカル変数を設定する機能です。ローカル変数とは、setlocalからendlocalまでの間で設定される変数のことです。この外に設定された変数は無関係となります。

詳しくはこちらの記事で解説しています。

enabledelayedexpansionは遅延環境変数を設定するときに使います。詳しくは今後別記事で紹介しますが、今回はこのオプションをつけないとダメなんだと思ってください。

for /f “delims=” %%a in (ex.txt) do (の解説

これは前節でも解説しましたが、forコマンドで繰り返し処理を行います。delimsオプションは削除する文字を指定します。

変数aにテキストファイルのex.txtファイルの内容を入れた後にdoの()内のコマンドを処理します。

set hensu=%%aの解説

setコマンドは変数を設定するコマンドです。

hensuという名前の変数に変数aをいれます。

変数aは先ほどのforコマンドの時に設定しましたね。変数aにはex.txtファイルの内容が含まれてます。

要するに、hensu=%%a=ex.txtとなり、hensuにはex.txtファイルの内容が入ることになります。

echo !hensu:taro=hanako! >> ex3.txt)の解説

ここで今回のコマンド処理の最大のポイントです。やっと最後にやってきました。

最大のポイントは!!に囲まれた内容です。hensuの内容のtaroをhanakoに変更するという意味です。

変数:[変数の中にある変えたい文字]=[変えた後の文字]

この変数の文字を変えた後のファイルを最終的に出力する方法が「>>」です。

「>>」の使い方は以下のとおりです。

[コマンド処理]>>[ファイル名]

まとめ

今回テキストファイルの内容の表示、編集方法を解説しました。

テキストファイルを表示するには「more」や「type」コマンドを使用します。

more ファイル名
type ファイル命

テキストファイルの特定の文字を削除するには複数のコマンドを使用します。forコマンドとtokensとdelimsオプションを使って、文字の切り取りや特定の文字の削除を行いました。

@echo off
for /f "tokens=1-7 delims=.," %%a in (ex.txt) do (echo %%a %%c %%e)

テキストファイルの特定の文字を変更するには、遅延環境変数を用いてforコマンドとdelimsオプション、!変数:[変数の中にある変えたい文字]=[変えた後の文字]!を使うことで編集することができました

@echo off
if exist ex3.txt del ex3.txt
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in (ex.txt) do (
 set hensu=%%a
 echo !hensu:taro=hanako! >> ex3.txt)
endlocal

テキストファイルの内容を表示するだけなら、コマンド1つでできて簡単です。

編集を行うには、ハードルが3段階上がりますね。

しかし、編集方法を覚えると、いくつものファイルを同じ編集する時に時間短縮に繋がりとても便利です。

コメント

タイトルとURLをコピーしました