質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

2回答

7072閲覧

バッチファイル .batファイルにてテキスト置換処理を自動化

keepp

総合スコア6

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2020/01/09 03:47

前提・実現したいこと

正規表現が使えるエディタを使用し
テキストファイルの文章をエディタの機能で
毎回同じ作業でちまちまと「置換」しています。

せん\n=せん。
ます\n=ます。
した\n=した。
です\n=です。
さい\n=さい。
しょう\n=しょう。
すか\n=すか?
うか\n=うか?
たか\n=たか?

このような具合です。.batファイルにて、処理を自動化する方法で一括してできないかとやってみましたがうまくいきませんでした。文字化けしたり、バッチファイルでの正規表現もよく理解していません。
テキストの文字コードはUTF-8です。

バッチファイルと同じフォルダ内にあるテキストファイルを上記の条件で文字置換するためのバッチファイルの作成方法を教えてくださると助かります。
宜しくおねがいします!!

補足情報(FW/ツールのバージョンなど)

win10 64bit

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

busyboxというツールを使うと、比較的簡単に対応できると思います。

インストール不要!WindowsでLinuxコマンドを使うにあるように、実行ファイルを一つダウンロードしてきます。

実際のテキスト置換作業はsedの機能を使えば簡単です。まず次のようなsedスクリプトファイルを用意します。とりあえずtest.sedとしておきます。

s/せん$/せん。/ s/ます$/ます。/ s/たか$/たか?/

次にコマンドラインから次のようにします。

busybox sed -f test.sed < 入力元テキストファイル > 出力先テキストファイル

これで置換処理後のテキストが別ファイルとして保存されるはずです。上書きすることもできるのですが、ミスったときに怖いので、別ファイルに出力する形が良いでしょう。

投稿2020/01/09 06:46

KojiDoi

総合スコア13669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keepp

2020/01/11 04:13

コメントありがとうございます。参考になりました。 今からやってみたいと思います。 助かります。
keepp

2020/01/11 05:48

G:\bin>busybox64 bash G:/bin $ busybox64 sed BusyBox v1.32.0-FRP-3329-gcf0fa4d13 (2020-01-09 09:35:27 GMT) multi-call binary Usage: sed [-i[SFX]] [-nrE] [-f FILE]... [-e CMD]... [FILE]... or: sed [-i[SFX]] [-nrE] CMD [FILE]... -e CMD Add CMD to sed commands to be executed -f FILE Add FILE contents to sed commands to be executed -i[SFX] Edit files in-place (otherwise sends to stdout) Optionally back files up, appending SFX -n Suppress automatic printing of pattern space -r,-E Use extended regex syntax -b Keep CR/LF (Windows-only) If no -e or -f, the first non-option argument is the sed command string. Remaining arguments are input files (stdin if none). G:/bin $ G:/bin $ busybox64 sed -f test.sed < in.txt > out.txt G:/bin $ やって見たんですが,out.txt は作成されるのですが,in.txt と同じ内容で置換されていないようです。 5.07kb ⇒ 4.94kb ファイルサイズは少し小さくなっています。 どこが間違っているのでしょうか?正常動作を確認するためになにか修正や注意すべき点があれば教えて下さい。よろしくおねがいします。
KojiDoi

2020/01/11 06:01

改行コードや文字コードの違いが原因で、マッチングが上手く行っていないかもしれません。 例えば、test.sedの内容を次のように変えてみると結果はどうなるでしょうか。 s/せん/__/ s/せん$/##/
keepp

2020/01/12 09:36

文字コードが原因でした。in.txtの文書をUTF-8からSJISにて保存し直したら,置換がうまくいきました。UTF-8では,半角英数文字は置換されました。 test.sedファイル内に下記の s/ctype=utf8 ます$/ます。/ を追加してもエラーは吐かれませんが,置換はされませんでした。 utf-8でも置換される方法は後日調べたいと思います 大変助かりました。busyboxというツールに対する理解も深められ本当に良かったです!
KojiDoi

2020/01/12 10:42

s/ctype=utf8 ます$/ます。/ そんな特殊文法はないので(単に"ctype=utf8 ます"という文字列を探そうとするだけ)、置換がうまくいかないのは当然です。 たぶんtest.sedがutf-8になってなかったのではないでしょうか。
keepp

2020/01/12 13:15

コメントありがとうございます。 test.sedがutf-8になっていませんでした。ご指摘感謝します。 その後も,いろいろ検索して試しているのですが,「sed 正規表現 改行」で調べても期待した動作結果に至りませんでした。 test.sedファイル内に下記の s/です\n/です。/g s/です\n$/です。/g を追記しましたが,置換もされず改行も取れませんでした。 すでに本件は解決済みですのでスルーしていただいてもOKです。^^; ありがとうございました。
KojiDoi

2020/01/12 13:36

おそらく改行コードの違いによりマッチングが失敗しているのだと思います。windowsの改行はCR+LFなのに対してsedの故郷であるunix系OSではLFが一般的です。そこで、テキストの末尾にCRがあるかもしれないときはこれを削除する必要があります。 http://pseudo.ddo.jp/~pseudo/cgi-bin/shop_v50/doc/webmaster.html
guest

0

勘違いしてはいけないのは、バッチファイルはあくまでも特定の処理(コマンド)を連続して処理するための仕組みであって、厳密な意味ではプログラミング言語ではないということです。
とは言ってもできないわけではなく、とても非効率な方法で作りこまないといけません。
なのでおすすめはしません。

代替案として、2点挙げます。

  1. 正規表現で置換できるアプリを使う
  2. 1を補うバッチファイルを作る

1はちょっと探せばフリーソフトが山ほどあります。
例えばコレとか。
試したわけではないのでこれで事足りるのかはわかりませんが、お試しください。

2は、1のみでは効率が悪い場合の話です。
1で、複数パターンの指定ができない場合、何度も実行する必要があり、それでは今までと変わりません。
そこでバッチファイルで連続実行するようにします。
そうすればバッチファイルを一回実行するだけで済みます。
注意点としてはバッチファイルから実行するため、1のアプリはコマンド式のアプリである必要があります。

投稿2020/01/09 04:24

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keepp

2020/01/11 04:12

コメントありがとうございます。 1はちょっと探せばフリーソフトが山ほどあります。 例えばコレとか。⇒動きませんでした。 バッチファイルにてテキスト置換処理を自動化できるか自分で調べます。 ありがとうございました。
ttyp03

2020/01/14 00:09

もう解決したとのことであれやこれやいいませんが、 >例えばコレとか。⇒動きませんでした。 動かないとは?使い方が分からない? 何が起きたのかをきちんと伝えるようにしましょう。 >バッチファイルにてテキスト置換処理を自動化できるか自分で調べます。 観点が違います。 他に自動化できるツールがないかを探すのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問