お世話になります。
早速ですが、
「DOSバッチでテキストファイルの文字列置換を行うプログラム」がいろいろ紹介されていたので、
皆さんのプログラムを流用させていただき、勝手に継ぎ足したDOSバッチプログラムを以下の
ように作りました。
このDOSバッチで置換されたテキストファイルに2つの問題が発生して困っています。
問題 1)UNIXテキストファイルの改行コードがLFからCR+LFに変ってしまう。
文字列置換した後にファイルサイズが大きくなっていたので発見しました。
問題 2)空白行がなくなる。
DOSプログラムでは、対応不可でしょうか?
やはり、sed,awk,WHS,power shell を使わないと解決しませんか?
-(DOSプログラム f0.bat)------------------------------------------------------
::** @echo off
setlocal ENABLEDELAYEDEXPANSION
set fname=%1
copy /b %fname% org >nul
type nul >%fname%
for /f "delims=" %%a in (org) do (set line=%%a&&set l=!line:abc=xxx!&&echo !l!>>%fname%)
del org
goto end
:end
exit /b 0
-(実行時の標準出力結果 list)-----------------------------------------------
C:\>setlocal ENABLEDELAYEDEXPANSION
C:\>set fname=t22.txt
C:\>copy /b t22.txt org 1>nul
C:\>type nul 1>t22.txt
C:\>for /F "delims=" %a in (org) do (set line=%a && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=J0000000 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=HHH && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=519 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=2011-08-28 12:16:44.98302 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=2011-08-28 12:16:44.016114 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=0 && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>(set line=abc && set l=!line:abc=xxx! && echo !l! 1>>t22.txt )
C:\>del org
C:\>goto end
C:\>exit /b 0
--(置換前 t22.org LF改行コード)--------------
J0000000
HHH
519
2011-08-28 12:16:44.98302
2011-08-28 12:16:44.016114
0
abc
--(置換後 t22.txt CR+LF改行コード)-----------
J0000000
HHH
519
2011-08-28 12:16:44.98302
2011-08-28 12:16:44.016114
0
xxxx
------------------------------------------
皆さんのご意見、ご指導をお待ちしてます。
No.1ベストアンサー
- 回答日時:
改行文字、空行、どちらの問題もバッチコマンド機能だけでは対応不可能です。
お書きのどれかのツールを使う必要があります。
VBScriptやJScriptならWindows標準装備なのでおすすめです。
VBScriptだと、下記のようなファイル foo.vbs を作って、
cscript //nologo foo.vbs < t22.org > t22.txt
====foo.vbs====================================================
Do While Not WScript.StdIn.AtEndOfStream
str = WScript.StdIn.ReadLine
WScript.StdOut.Write replace(str,"abc","xxx") & vbLF
Loop
この回答への補足
notnot さん、WSHでの動作確認ができました。
Windows Script Host Version 5.8と5.6でいくつかのVBScriptを作って実行してみましたが、
DOSだけで四苦八苦していたことが、かなり時間の無駄だったように思います。
Windows XP, Windows 7の両方で動作確認が取れたのでよかったです。
DOSの呪縛から解き放たれた気分です。
完結丁寧なアドバイス、ありがとうございました。
notnotさん お世話になります。
問題2)空白行の対応ができない段階で、私の目標が達成できないことになるので、
やはり、DOSオンリーをあきらめるのが妥当なんですね。
先ほど、GNU sed 4.2.1を個別にインストールして、UNIXのテキストの文字置換を
やってみたのですが、
sed -e s/adc/xxx/ t22.txt > t23.txt
を実行すると、
問題2)の空白行問題は、解決するのですが、問題1)の改行問題は解決しませんでした。
UNIXテキストファイルの改行LFが改行CR+LFに書き換わってました。
私が使っているPCのうち、
Windows XP SP3 は、Windows Script Host Verion 5.6
Windows 7 は、Windows Script Host Verion 5.8
が入っていましたので早速、取り組んでみます。
私が途中まで作ったファイルの解凍処理がバッチなので、このバッチの中から
WSHをコールするのは、
cscript //nologo foo.vbs < t22.org > t22.txt
で実行できますか?
あっ、自分で試してみます。
また、わからないことがあったら、ご質問させていただきます。
早速、WSHに取り組んでみます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチでテキストファイルから...
-
バッチファイルで昨日の日付を取得
-
コマンドプロンプト標準出力と...
-
コマンドプロンプトで2ヶ月前3...
-
WinMailCmdのバッチファイルに...
-
echoとsystem関数について
-
DOSのバッチで、変数中のファイ...
-
バッチファイルで常に最新の現...
-
cygwinのtschで日本語文字化け
-
コマンドプロンプト(バッチファ...
-
バッチファイル テキストファイ...
-
バッチファイル(for文)がうま...
-
コマンドプロンプト画面の閉じ...
-
ファイル名に日時挿入バッチフ...
-
子バッチ内のキー入力処理へ自...
-
絶対パス名からファイル名を取...
-
バッチファイルに日付(ミリ秒...
-
VBアプリケーションで終了コー...
-
呼び出し元バッチを知るには?
-
バッチファイルでDirで取得した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチでテキストファイルから...
-
バッチファイルで昨日の日付を取得
-
コマンドプロンプト標準出力と...
-
コマンドプロンプトで2ヶ月前3...
-
コマンドプロンプト画面の閉じ...
-
コマンドプロンプト(バッチファ...
-
バッチファイルで常に最新の現...
-
VBアプリケーションで終了コー...
-
コマンドプロンプト(バッチ)...
-
バッチファイルでDirで取得した...
-
DOSのバッチで、変数中のファイ...
-
IPアドレスの第3オクテットだ...
-
バッチファイルで2つ以上の変...
-
子バッチ内のキー入力処理へ自...
-
バッチファイル(for文)がうま...
-
絶対パス名からファイル名を取...
-
呼び出し元バッチを知るには?
-
DOSのバッチで、テキストファイ...
-
バッチファイル テキストファイ...
-
echoとsystem関数について
おすすめ情報