• ベストアンサー

バッチファイルでテキストファイルの文字列を取得したい

すみません、どなたか教えて下さい。 バッチファイル(test.bat)内で、他のテキストファイル(ok.txt)の文字列を取得したいです。 ok.txtは 20070614 TEST となってます。 この2つの文字列をそれぞれで取得する方法を教えて下さい。 よろしくお願い致します。

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

  • ベストアンサー
  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.4

>A.txt >YYY 20070615145721.000000+540 OK >ZZZ 20070614120430.000000+540 NG > >B.txt >YYY 20070615145721 OK >ZZZ 20070614120430 NG > >A.txtの内容をB.txt(新テキストファイル)へ出力したいのです。 >・A.txtの行は複数行あります。 >・A.txtのスペースは半角スペースが2つあり、半角スペース1つにしたいです。 >・A.txtの「20070615145721.000000+540」は「.」以降を削除したいです。 > 以下の点補足してください。 >・A.txtの行は複数行あります。 A.txtは上記の例のようなパターンで行数が不定(増えたり減ったりする)ということですね。 >・A.txtのスペースは半角スペースが2つあり、半角スペース1つにしたいです。 ここがよくわかりません。 上記例で半角スペースは1つに見えます。 YYYの直後と540の直後に半角スペースが一つずつで計2つという意味ですか? そうすると、B.txt も半角スペース2つあると思うのですが。 書き出す条件と例示は一致させてください。 お急ぎでしたら、半角スペースの件を抜きにしたら、以下のようなバッチで A.txt→B.txtへ変換出来ます。 echo off for /F "tokens=1-4 delims=. " %%a in ( A.txt ) do echo %%a %%b %%d>>B.txt for文の tokens で抜き出したい項目数を記載しますので、前回のサンプルの tokens=1,2 では2項目しか取得できません。それでecho %data1% >> c:\text.txt で何も出力されなかったのでしょう。今回の記述では、"tokens=1-4 delims=. " としており、項目数が1~4項目、区切り文字が半角スペースと小数点になっています。

user10
質問者

お礼

ありがとうございました。 アドバイスを参考に、まずB.txtへ書き出しました。 >・A.txtのスペースは半角スペースが2つあり、半角スペース1つにしたいです。 ここがよくわかりません。 上記例で半角スペースは1つに見えます。 YYYの直後に半角スペースが2つあります。Webで1つに省略されたようです。 ですので、B.txtへは、delims=. で区切られた %%Aと%%Bで ZZZ 20070614120430 000000+540 NG のように書き出し、 その後、また同じような下記構文で、C.txtへ書き出すことに成功しました。 FOR /F "tokens=1-4 skip=1" %%A IN (B.txt) DO (  echo %%A %%B %%D>> C.txt ) いろいろとご丁寧に教えていただきありがとうございました!!

その他の回答 (3)

  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.3

こんにちは >更に質問してもよろしいでしょうか? >このdata1をあるテキストファイルに書き出したいのですが、何も書き出されません。 >何か問題があるのでしょうか?? > >echo %data1% >> c:\text.txt まず、確認したいのですが、この echo %data1% >> c:\text.txt はどこに記載しているのですか?例示したバッチの直後ですか?一旦コマンドプロンプトを閉じたりしてませんか? 以下のように変更してみて %data1% にちゃんと日付が書き込まれているか確認しましょう。 echo %data1% echo %data1% >> c:\text.txt pause type c:\text.txt バッチの最初の echo off を取ってみて、実際に各行でどのように動作しているか確認することも参考になります。

user10
質問者

補足

ご丁寧な回答ありがとうございます。 シンプルな質問を行い、あとは自分で解決できると思ったのですが・・・力不足でなかなか行いたいことができません。 申し訳ありませんが、良い方法がありましたら教えて下さい。 A.txt YYY 20070615145721.000000+540 OK ZZZ 20070614120430.000000+540 NG B.txt YYY 20070615145721 OK ZZZ 20070614120430 NG A.txtの内容をB.txt(新テキストファイル)へ出力したいのです。 ・A.txtの行は複数行あります。 ・A.txtのスペースは半角スペースが2つあり、半角スペース1つにしたいです。 ・A.txtの「20070615145721.000000+540」は「.」以降を削除したいです。 お忙しい中申し訳ありませんがよろしくお願いします。

  • pita-gora
  • ベストアンサー率70% (102/145)
回答No.2

>「20070614」「TEST」という2つの文字列をバッチファイル(test.bat)で >判定などの変数として使用したいのです。 > >oktxt内文字列の「20070614」「TEST」は日によって、変更されます 次のコマンドで取得できます。(「20070614」「TEST」の間は半角の空白で区切られているとします) echo off for /F "tokens=1,2" %%a in ( ok.txt ) do ( set data1=%%a set data2=%%b ) echo 一番目の文字列 - %data1% echo 二番目の文字列 - %data2%

user10
質問者

お礼

ありがとうございました!! 更に質問してもよろしいでしょうか? このdata1をあるテキストファイルに書き出したいのですが、何も書き出されません。 何か問題があるのでしょうか?? echo %data1% >> c:\text.txt

  • TA-HT81S
  • ベストアンサー率39% (72/184)
回答No.1

意味がわかりません。 取得って何ですか? それぞれで取得って、どういうことですか? test.bat oktxt 1を実行すると「20070614」と表示し、 test.bat oktxt 2を実行すると「TEST」と表示するってこと?

user10
質問者

補足

説明が悪くて申し訳ありません。 「20070614」「TEST」という2つの文字列をバッチファイル(test.bat)で 判定などの変数として使用したいのです。 oktxt内文字列の「20070614」「TEST」は日によって、変更されます。 ご理解いただけたでしょうか?