• ベストアンサー

DOSコマンドによるテキストファイル編集について

下記「test1.txt」のようなファイルがあります。 先頭から指定桁目に特定文字を挿入し、末尾から指定桁分を削除する。それを行単位に行い、最終行まで繰り返す。 といったコマンド(構文)についてご教授頂けないでしょうか? 例: 先頭から4桁目に特定文字(XXX)を挿入 末尾から3桁分の文字を削除 <test1.txt> aaabbbcccddd eeefffggghhh ・・・ <実行結果:test1.txt> aaaXXXbbbccc eeeXXXfffggg 宜しくお願いします。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

だいぶ手をぬいてますが、こんな感じ ほんちゃんではエラー制御やオブジェクトの宣言、開放などきちんとしましょう //test.vbs Const ForReading = 1, ForWriting = 2 main sub main Set objArgs = WScript.Arguments if objArgs.count=0 Then Set sOut = WScript.StdOut sOut.writeLine "no data" sOut.close exit sub end if fileName=objArgs(0) Set fs = CreateObject("Scripting.FileSystemObject") tempName=fileName+".temp" Set tf1 = fs.OpenTextFile(fileName ,ForReading ) Set tf2 = fs.OpenTextFile(tempName ,ForWriting ,True) While Not tf1.AtEndOfLine x=tf1.ReadLine y=convertText(x) tf2.WriteLine(y) wend tf1.Close tf2.Close end sub function convertText(txt) line=Mid(txt,1,3) line=line + "XXX" line=line + Mid(txt,4) line=Mid(line,1,Len(line)-3) convertText = line end function これをコンソールで cscript test.vbs test.txt とすると、test.txt.tempができるのがわかると思います。 最終型を元ファイルにコピーするか、別名にするかは好きにしてください

yopppy
質問者

お礼

yambejp様 お世話になりました。無事にやりたいことができるようになりました。 本当にありがとうございます!!!!

その他の回答 (3)

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.3

OSのバージョンは? DOSコマンドにこだわる理由は何でしょうか? MS-DOSを使っているのでしょうか? 標準のコマンドでは不可能なので、vbs なり、ほかのプログラムをインストールして使用してはいかがでしょうか。

yopppy
質問者

お礼

回答ありがとうございます。 Windows2003Serverになります。 DOSコマンドの理由ですが、今回のテキストファイルの編集後に 別サーバへコピーする動作(タスクで実行)が入っていますが、 ここがDOSコマンド(COPY)を使っており、ミックスできればと思いました。VBSを別途タスクに仕掛ければ済む話ですので、そちらでも大丈夫です。

  • x1va
  • ベストアンサー率26% (802/3006)
回答No.2

DOSやWindowsのバッチ機能では無理です。 #1でも回答があるように、何らかのテキスト処理用プログラムをインストールする必要があります。 バッチではなくVB ScriptやWindows PowerShellならOSの標準機能で可能です。

yopppy
質問者

お礼

回答ありがとうございます。 編集したいテキストファイルはある時間帯に自動で飛んできますので、 WindowsタスクスケジューラにVBSを仕掛けて実行できればと思います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

DOS版のsedやawkを入れるという選択肢はありますか?

yopppy
質問者

お礼

回答ありがとうございます。 Windows2003Server上で動作させますが、極力ユーティリティーのセットは避けたいと思っています。

関連するQ&A

  • sedコマンドによる最終行の削除について

    sedコマンドを使用してファイルの最終行を削除する方法を調べていたのですが 最終行の削除は問題なくできたのですが最終行から特定行までを消すため以下のコマンドを発行したのですがうまくいきませんでした。複数サイトを見てみたんですが構文自体は同じでしたのでおそらく問題ないとは思うですが何か気づく方がいたらお教えください。 以下実行コマンド sed -e '$-3,$d' sed_test.txt

  • MSDOSコマンドでディレクトリ内をきれいにしたい

    DOSコマンドで複数のファイルとサブディレクトリをすべてどこかのディレクトリに移動するのと削除するにはどのようなコマンドになりますでしょうか? 複数行のバッチファイルにすることを想定しておりますので複数コマンドになってもOKです。 del,moveコマンドやrmdirだけでは対応できなそうなので、、、。 (1) C:\TEST\ C:\TEST\a.txt C:\TEST\b.txt C:\TEST\XXX\xxx.txt C:\TEST\YYY\yyy.txt を C:\TEST_NEW\ C:\TEST_NEW\a.txt C:\TEST_NEW\b.txt C:\TEST_NEW\XXX\xxx.txt C:\TEST_NEW\YYY\yyy.txt に移動したいのと (2) C:\TEST\ C:\TEST\a.txt C:\TEST\b.txt C:\TEST\XXX\xxx.txt C:\TEST\YYY\yyy.txt を C:TEST\ 内を空っぽにしたいです。 C:\TEST\ の中身は毎回変わり(上記a,b,XXX,YYY,xxx,yyyの名前が変わる)、(1)と(2)のバッチファイルを作って、ときどき C:TEST\をきれいにしたいです。

  • batやvbsでテキストファイルの何行目に指定の文字を追記する方法

    現在、下記内容のファイル(test.txt)指定した行に指定文字を追記できる方法を探しております。 【test.txt内容】 [test1] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: [test2] [test4] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: [test5] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: end 【追記したい内容】 test.txtの"[test2]"行の下の行に以下の文字を追記したいです。 [test3] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: 指定行に追記するというコマンド自体はないと思い、batやwshの本などを読んではいるのですがなかなか良い考えが浮かびません。 ご教示の程よろしくお願いいたします。

  • コマンドでテキスト編集[redhat Linux]

    最近Linuxを使い始めました。 コマンドでテキスト編集を行いたいのです。 下図のような感じで特定の行数の末尾に改行せずに文字列を追加してファイルに上書き ---------------------------------------- #aaaaaaaa      #bbbbbbbb #cccccccc   ↓ #aaaaaaaa #bbbbbbbbzzzzzzzz #cccccccc ---------------------------------------- もしくは特定の文字列の後ろに新しい文字列を挿入、というのは可能でしょうか? エディタでも出来なくは無いのですが、量が多いので便利な使い方をこの機会に少しでも覚えたいと思いまして。 お暇でしたら、どうぞ回答をお願いします。

  • ファイルの先頭に文字を追加するには?

    ファイルの先頭に文字を追加するにはどうしたらよいでしょうか? ファイルの末尾に追加するなら echo 追加する文字列 >> ファイル名 でオッケーですが、 先頭に追加する方法が、単純そうなのに、調べても分かりませんでした。 例えば test.txt の中身が以下で、 aaa bbb # echo hello >> test.txt で aaa bbb hello となりますが、 hello aaa bbb とするには、どうしたらよいでしょうか。 単純なコマンドはあるでしょうか。

  • Excel でテキストファイルを開くときに「テキストファイルウィザード」を起動させたい

    Excel(Excel 2003)を「ファイル名を指定して実行」にて起動し(excel "C:\xxxx\xxx\xxx.txt")、Textファイル(.txt)を起動すると、Excel の機能の「テキストファイルウィザード」が起動されずにテキストファイルの内容がExcelのシートに展開されてしまいます。「テキストファイルウィザード」が起動されない為、区切り文字の指定ができず、特定の区切り文字を指定してファイルを開くことができません。 「ファイル名を指定して実行」にて、excel "C:\xxxx\xxx\xxx.txt" のように指定して実行した時に、「テキストファイルウィザード」が起動するように設定することはできませんでしょうか?

  • 沢山のテキストファイルを一つに

    下のように、Testフォルダに Area1、Area2・・・とフォルダがあり、 その中に、Sample.txtがあります。 C:\Test\Area1\Sample.txt C:\Test\Area2\Sample.txt C:\Test\Area3\Sample.txt ・ ・ ・ C:\Test\Area30\Sample.txt それぞのフォルダのSample.txtは "1234567890.123" "2345678901.234" "3456789012.345" . . . のように、数桁の数字が数百行並んでいます。 例えば、 Area1\Sample.txt に100行、 Area2\Sample.txt に200行、 Area3\Sample.txt に150行あるとします。 これを、 1~100行にArea1\Sample.txtの内容を、 101~300行にArea2\Sample.txtの内容を、 301~450行にArea3\Sample.txtの内容を、 として、Area30までのSample.txtを並べた 一つのテイストファイルに書き直したいのですが、 何しろ沢山あるので、一つ一つ開いてコピぺでは、 書き落としなども心配ですし、毎回大変時間が掛かります。 簡単に並べて書き出す方法はないでしょうか。 Excel等を使ってできないでしょうか。 宜しくお願いします。

  • Windowsのバッチファイルを利用しtxtファイルの指定のした位置に文字を追加する方法

    現在、下記内容のファイル(test.txt)指定した行に指定文字を追記できる方法を探しております。 【test.txt内容】 [test1] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: [test2] [test4] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: [test5] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: end 【追記したい内容】 test.txtの"[test2]"行の下の行に以下の文字を追記したいです。 [test3] :::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::: 指定行に追記するというコマンド自体はないと思い、batやwshの本などを読んではいるのですがなかなか良い考えが浮かびません。 ご教示の程よろしくお願いいたします。

  • DOSの文字抽出

    findstrで特定の行を抽出できました。 test.txtというファイルに入っています。 85文字のうちの43行目から8文字抽出したいのですが、どうすればいいでしょうか?

  • DOS:テキスト内の特定行の次行に文字列を追加

    DOSコマンドプログラムでテキストファイル内の特定文字列を含む行の次の行に、指定した文字列を含む行を挿入する方法 Windows7の DOSコマンドプログラムで、下記の"input1.txt" を"output1.txt"に変換したいと思っています。 "input1.txt"内で"Name:"を含む文字列があれば、その行の次の行に、"A1:10.2"という行を挿入するDOSコマンドプログラムをご教授いただけないでしょうか。見つけた文字列行の次の行に挿入する方法というのが、できなくて困っています。 ---input1.txt------ Name: Tanaka B1: H2 C1: 2 Comment: ABC# 61, Seq# M34 Num H: 3 12 37.97 13 105.90 14 203.82 Name: Suzuki B1: H2 C1: 2 Comment: ABC# 58, Seq# M39 Num H: 2 11 37.97 12 105.90 Name: Yamada B1: H2 C1: 2 Comment: ABC# 93, Seq# M397 Num H: 4 2 2.00 12 4.00 13 9.99 14 29.97 --------------- ---output1.txt----- Name: Tanaka A1:10.2 B1: H2 C1: 2 Comment: ABC# 61, Seq# M34 Num H: 3 12 37.97 13 105.90 14 203.82 Name: Suzuki A1:10.2 B1: H2 C1: 2 Comment: ABC# 58, Seq# M39 Num H: 2 11 37.97 12 105.90 Name: Yamada A1:10.2 B1: H2 C1: 2 Comment: ABC# 93, Seq# M397 Num H: 4 2 2.00 12 4.00 13 9.99 14 29.97 -----------------

専門家に質問してみよう