• ベストアンサー

テキストファイルより特定の文字を削除する方法

皆様 御世話になっております。 現状、以下の内容のバッチを実行し、dump1.txtのトークン9以後の値をdump2.txtに反映させています。 -------------------------------------------- FOR /F "TOKENS=9,10*" %%A IN (c:\dump1.txt) DO ECHO %%A %%B %%C > c:\dump2.txt -------------------------------------------- dump1.txtからdump2.txtへ引き継がれる値の中で、「\015\n」の文字列のみ不要なので削除したいのですが、このようなことは可能でしょうか? ※「\015\n」は連続した文字列です。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>テキストファイルのフォーマットとはどのようなものでしょうか? スペース区切りで、そういう区切られたものが9コ以上あるとかそういうことなんですが… とりあえずよくわからんけど そういうフォーマットであるとして とりあえず作ってみました。 以下の部分を適当な名前で拡張子vbsで保存して、ダブルクリックで実行してみて下さい。 'スペース区切りのフィールドの9番目以降を出力する '\015\nは削除する Dim fso Dim inFile, outFile Dim field Dim outString Dim i Filename="dump1.txt" '読み込みファイル名の設定 Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set inFile = fso.OpenTextFile("dump1.txt",1)'読み込みファイル Set outFile = fso.OpenTextFile("dump2.txt",2,true)'書き込みファイル Do until inFile.AtEndOfStream field=split(inFile.ReadLine) outString="" for i=8 to UBOUND(field) outString = outString & field(i) & " " next if outString <> "" then outString = left(outString,len(outString)-1) outString = Replace(outString, "\015\n", "") ' \015\nを削除する outFile.WriteLine(outString) Loop outFile.Close inFile.Close

wirednabi
質問者

お礼

BLUEPIXY様: ご回答有難うございます。 ご紹介頂きましたスクリプト実行で見事に 完了しましたm(_ _)m 早々のご回答、本当に有難うございました!

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

VBScriptではダメなのでしょうか? あと、dump1.txtのフォーマットを教えて下さいませんか?

wirednabi
質問者

お礼

BLUEPIXY様: >VBScriptではダメなのでしょうか? VBScriptについての知識が全くないので、 実現可能であるか判断できません。 申し訳ないです。 何か一例を出して頂けると非常に助かるのですが・・・。 >あと、dump1.txtのフォーマットを教えて下さいませんか? テキストファイルのフォーマットとはどのようなものでしょうか?WindowsXPのメモ帳を使用して作成されるものなのですが・・・。

関連するQ&A

  • バッチファイルでの計算方法

    一行のみのtxtファイル(1111.txt)に日付 スペース 時間 スペース 値 が格納されています。 バッチファイルにて上記値に定数(6666)をかけ単位を追加して出力(2222.txt)したいとおもいます。 以下のように書いてみましたが どこが悪いかよくわかりません。 どなたかお教えいただきたいと思います @ECHO OFF FOR /F "eol=# tokens=1,2,3" %%a in (1111.txt) SET /A x=6666 SET y=%%c*%x% DO ECHO %%a %%b %%y >2222.txt

  • msdosのfor /fのtokens=の挙動

    Windows7のmsdosのfor /fのtokens=の挙動ですが、 tokens=1,3とした時は1番目と3番目のトークンが取り出され tokens=1-3とした時は1番目~3番目のトークンが取り出される のではないのでしょうか。 例えば、以下のような例の場合、 test1.batでは、 a b d f test2.batでは、 a b c d e f となるように思うのですが 実際には、どちらも、 a b d となり、1番目のトークンしか 取り出されていないのですがなぜなのでしょうか。 ---test.txt--------------------------- a b,c d,e,f ---test1.bat------------------ for /f "tokens=1,3 delims=," %%a in (test.txt) do ( echo %%a ) ---test2.bat------------------ for /f "tokens=1-3 delims=," %%a in (test.txt) do ( echo %%a ) ------------------------------

  • テキストの文字を抜き出す方法

    お世話になっております。 テキストに記載されている文字を、特定の開始文字列から終了文字列まで抜き出したいと思っております。また、抜き出したテキストは別のフォルダに保存する設定を考えてます。 例えば、 --------------------------------------------------------------- aaaaaa11111 bbbbb22222 c333 d4444 e55555 --------------------------------------------------------------- と書かれていた場合、bからdまでの文字列だけを抜き出したいのです。 その作業をバッチファイルで作成したいと思っており、Webで調べると下記のコマンドで実行が出来そうなのですが、私にはちょっと複雑すぎて困っています。 @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION (FOR /F "delims=[] tokens=1*" %%0 IN ('FIND /N /V ""') DO ( IF "!FLAG!"=="1" SET FLAG=2 IF "!FLAG!"=="3" SET FLAG=4 SET "LINE=%%1" SET "LINE=!LINE:%1=!" IF NOT "!LINE!"=="%%1" SET FLAG=1 SET "LINE=%%1" SET "LINE=!LINE:%2=!" IF NOT "!LINE!"=="%%1" SET FLAG=3 IF "!FLAG!"=="1" ECHO=%%1&rem IF "!FLAG!"=="3" ECHO=%%1&rem IF "!FLAG!"=="3" GOTO :EOF IF "!FLAG!"=="2" ECHO=%%1 ) )<%3 bからdまでを指定する場合、どのように指定すればいいのでしょうか? また、抜き出したテキストを別のフォルダに保存する為のコマンドもご教授願えませんでしょうか? よろしく御願いします。

  • 特定文字列の次のトークンを取り出す

    バッチにて、以下文字列内のFROM以降の文字列の抽出を行いたいと考えてます。 <chusyutu.txt> FROM hogehoge FROM hogehoge pekepeke FROM hogehoge     ・     ・     ・ その場合、 for /f "delims=FROM" %%i IN ("chusyutu.txt") do (echo %%i >> result.txt) としてましたが、一部文字列が抽出できておらず、"ECHO は <OFF> です。"と表示されてしまって おります。上記、構文に問題ありますでしょうか。お教えて頂ければ幸いです。

  • DOSのバッチで、テキストファイル中の文字を置換したい

    いつもお世話になっております。 WindwsXPでDOSバッチを使ってテキストファイル中にある文字列1を文字列2に置換したいのです。 ネットをさまよっていて、こんな例を見つけました。 (参考にしたのはここです。http://www.fpcu.jp/dosvcmd/bbs/log/cat3/cat54/2-0391.html) ====================== @echo off if "%1"=="" goto end set fname=%1 copy %fname% org >nul type nul >%fname% for /f "tokens=1* delims=" %%a in ( org ) do (set line=%%a&& call :sub) del org goto end :sub :この1行下の acb=xyz に置換前と置換後の文字列を指定する。 set l=%line:abc=xyz% echo %l%>>%fname% goto :EOF :end ====================== これをsample.batという名前で保存し、DOSのウィンドウでsample < a.txt と打つと、a.txtファイル中の"abc"が"xyz"に置き換わります。 これに手を入れて置換前と置換後の文字列を可変にしたく思い、sub中に set mae=abc set ato=xyz の2行を加え、変数に値を設定するようにしました。 ところが、次の1行の書き変え方がわかりません。 set l=%line:abc=xyz% を set l=%line:%abc%=%xyz%% のように変えてみましたが、うまく動きません。 どなたかご教授いただけませんか。DOSだけでファイル中の文字列の置換ができればset文を使う使わないにはこだわりません。

  • バッチファイルのFOR文について【tokens~】

    お世話になっております バッチファイルの、文字列操作で ---------------------------------------------------------- FOR /F "eol=; tokens=2,32 delims=, " %i in (myfile.csv) do @echo %i %j %k ---------------------------------------------------------- のtokensで指定している32列目(カンマが32個目)以降の値を 取得しません。 なぜでしょうか。 下記のHPを参照すると、一度変数をクリアしそのしたでさらにForで 指定すればよいとのことなのですが、欲しい値が多すぎて とても、Forのしたに何度書きたくありません。 http://folomy.jp/heart/?m=pc&a=page_c_topic_detail&target_c_commu_topic_id=12560 どのようにしたら、目的を果たせるのでしょうか。 ご教授ください。

  • MS-DOSバッチファイルで

    度々ご教授お願い致します。 以下のようなMS-DOSバッチファイルで、xcopy コピー元 コピー先のようにしたいのですがこれではうまくいきません。 どのようにしたら良いでしょうか。宜しくお願い致します。 FOR /F "eol=; tokens=1,2 delims=, " %%i in (c:\a.txt) do (@echo %%i %%j) xcopy %%i %%j /s /o /y >> (@echo %%i %%j)

  • 【バッチファイル】for繰り返しがうまくいかない

    バッチファイルの置いてあるフォルダ内(ついでにサブフォルダ内も)の 特定の拡張子(今回は.txt)ファイル全てを対象に (1)ある行ある列n文字目から2文字を読み込む×2 (2)読み込んだ文字をそのファイル名の先頭に追加 というバッチファイルを作りたいです。 具体例 テキストの中身↓ a.txt ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... ○○○○ ○○xx ○○yy ○○○○ .... ○○○○ ○○○○ ○○○○ ○○○○ .... →ファイル名を「xxyya.txt」にしたい そこで素人ながら下記のようなバッチファイルを作成してみましたが、 フォルダ内にある1つ目のファイルに対してはうまく動くのですが 2つ目以降はリネーム出来ません。 フォルダ内すべての.txtファイルに実行するための 対処法がお分かりになれば、ご教授いただけると幸いです。 「rename.bat」 cd /d %~dp0 rem .txtファイルを列挙 for /f "usebackq tokens=*" %%i in (`dir /s /b *.txt`) do ( set name=%%~xni rem 特定の行列の文字列を抜き出して変数へ格納 for /f "skip=5 tokens=2,3" %%a in (%%i) do ( set front=%%a set back=%%b rem 7行目以降は不要なのでforから離脱 goto break ) :break rem 抜き出した文字列からさらに必要な文字を抜き出して変数へ set hed="%front:~2,2%%back:~2,2%" rem 元のファイル名へ追記 ren %name% %hed%%name% )

  • DOSバッチでUNIXテキストファイルの文字列置換

    お世話になります。 早速ですが、 「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 ------------------------------------------ 皆さんのご意見、ご指導をお待ちしてます。

  • バッチファイル テキストファイル内の最後の\以下を削除したい

    バッチで、あるテキストファイル内の最後の\以下を削除して、その結果をバッチの値として利用したいです。 ●テスト条件 %TEMP%のtest.txt に以下のテキスト。 C:\Program Files\software\top xyz ●求める結果: 行末から最初の\以下の文字列を削除。この文字列をバッチファイルで使いたい。 C:\Program Files\software\ ●試したコマンド: なし 全体の流れとしては、バッチでquery取得したパスの不要な部分を削除して、求まったパス(のdirの結果を出力するために)を再度バッチで利用したいです。適切なコマンド・方法がありましたらお願いいたします。