アプリ版:「スタンプのみでお礼する」機能のリリースについて

一つのテキストファイルの中身を置換する方法は
解るのですが一つ一つやるのが不便なので、
テキストファイルの内容を一括で
置換できるコマンドを探しています。

ファイル名 A.txt
内容    名前A.名前B.本文
ファイル名 B.txt
内容    名前A.名前B.本文

具体的には上記のように複数のファイルがあるのですが
この複数のファイルの名前Aという部分を一括で変更できるコマンド又はやり方を教えてください。

A 回答 (4件)

DOSのコマンドでファイルの文字列置換はありません。



・正規表現可能な文字列置換のフリー/シェアウェアを探す
 (エディタのマクロ等も含む。秀丸辺りなら串刺し置換とか可能でしょう)

・WSH(VBScrit/JScript etc.)で何とかする

・Cygwin辺りをインストールしてsed, awk, perl などで何とかする

・findstrとFOR文を組み合わせたバッチで何とかする

一番お手軽は最初のかな?

バッチに拘るのであれば、その次にお手軽そうなWSHの例を書いておきます。
改行が崩れていたら適宜読み換えて下さい。それができないなら、お手軽ツールを探す方が吉。

仕様がわからないので、以下を想定。
「名前A.は1行目の行頭にしか存在しない」

'VBScriptファイル:changeAll.vbsの内容
'Usage: CScript //nologo changeAll.vbs
Const ForReading = 1, ForWriting = 2
Dim fso, f, f1, fc, f2, mypath , patrn, strng, regEx, strng2

mypath="C:\test\" 'ディレクトリの場所
patrn="^名前A." 'ターゲット文字列が行頭に一致 ※^が肝なので取らないように
replStr="名前Z." '変更する文字列

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(mypath)
Set fc = f.Files
For Each f1 in fc
'拡張子がtxt以外は実行しない
If fso.GetExtensionName(f1.path) = "txt" Then
'ファイルの内容を読み込む
Set f2 = fso.OpenTextFile(f1.path, ForReading)
strng = f2.ReadAll
f2.Close
'正規表現でターゲット文字列が含まれていたらReplaceする
Set regEx = New RegExp
regEx.Pattern = patrn
regEx.IgnoreCase = True
strng2 = regEx.Replace(strng, replStr)
'置換後と違っていたら書き換える
If strng <> strng2 Then
WScript.Echo strng2
Set f2 = fso.OpenTextFile(f1.path, ForWriting, True)
f2.Write strng2
f2.Close
End If

End If
Next
    • good
    • 0
この回答へのお礼

文字列の置換はなかったんですね、
お答えいただいた内容を参考にバッチを作りました
お答えいただきありがとうございました。

お礼日時:2004/11/10 09:09

Windows上の解決策は既に出ているのでDOS上での実現法を。


PC-DOSならお望みのことが外部コマンドREXXを使って簡単に実現できます。

例えばこんな感じでOK:
・同じコマンドを繰り返すにはforを以下の様に使います
for %i in (*.txt) do a.bat %i
・a.batには第1引数を処理するファイルとして扱うための
手順を適当に記述しておきます(以下の2行)
rexx a.rex < %1 > tmp
copy tmp %1
・a.rexには置き換えスクリプトを記述します(以下の3行)
do while Lines() > 0
say translate(linein(), 'B', 'A');
end

PC-DOS Ver7.0で動作確認しました。PC-DOS2000も同じはずです。
詳しくは view dosrexx してみてください。
    • good
    • 1
この回答へのお礼

お礼が遅くなりましたが、助かりました。

お礼日時:2004/11/10 09:08

DOSのコマンドではファイルの編集はほぼ無理だったと思うのですが・・・その「中身を置換する方法は解る」というのは単に手動で置き換えているだけなんでしょうか?



でDOSのコマンドだけでそういうことをやるなら本来は別のツールを使うか、あるいは最初からVBS/WSH辺りでスクリプトを書くことになるかと思います。

参考URL:http://www.hatena.ne.jp/1093334953
    • good
    • 0
この回答へのお礼

遅くなりましたが、お答えいただきありがとうございました。

お礼日時:2004/11/10 09:11

>一つのテキストファイルの中身を置換する方法は


解るのですが一つ一つやるのが不便なので、

置換する方法がわかっているのであれば、それをバッチファイルにまとめるだけでは?
私は置換する方が難しいと思うんですけど。
    • good
    • 0

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