- ベストアンサー
バッチでテキストファイルから任意の行のみ取得したい
- バッチファイルを使用して、テキストファイルから特定の行のみを取得する方法を知りたいです。
- 取得した行の内容を変数に格納し、処理を行いたいと考えています。
- 行数をカウンタとして使用して、複数の行を取得し繰り返し処理を行いたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No3ですが、たぶん提示したスクリプトを見ると、ある事に気がつくはず? findstr /n /r "." a.txt | findstr /r "^3:" で3行目を表示してくれます。え!? それだけ。そうなんです ただ、あと、先頭の”3:” をどうやって切り離すか? と言う問題にぶつかる。さらにファイルに先頭に”3:”があった場合、どうするのか? さらに、findstr の正規表現の動作が??? 表示すれるのはいいが、変数にどうやってセットするのか? となる。結局 for 文を使いまわす事になります。 まあ、適当に改変して、上記の問題を解決してください。
その他の回答 (3)
- lupin-333333
- ベストアンサー率31% (294/933)
No1, 2 さんが指摘しているようにちょっと趣旨がわからない。 >for /? で見れば、わかるような話。とは言え、ランダムに行を表示したときは more コマンドで行数を指定すればいい。抜き出したいときは、適当なコマンドが標準では見つからない。で、 --- a.bat -------------------------------- @echo off setlocal set > a.txt rem 3行目を line 変数にセット。 call :PicUp1 "3" "a.txt" echo line=%line% call :PicUp2 "3" "a.txt" echo line=%line% goto :EOF :PicUp1 set /a No="%~1-1" for /f "usebackq skip=%No% tokens=* delims=" %%a in (`findstr /n /r "." %2`) do ( set line="%%a" exit /b 0 ) goto :EOF :PicUp2 set /a No="%~1-1" for /f "usebackq skip=%No% tokens=1,* delims=:" %%a in (`findstr /n /r "." %2`) do ( set line="%%b" exit /b 0 ) goto :EOF endlocal ------------------------------ などと擬似ユーザー定義関数を作るしかない。これで行数指定でピックアップできる。
お礼
なんとかいていただけましたか。バッチ作ってみましたが、上手くゆきません。うーんしかし自分には理解が難しい感じです。
- play_with_you
- ベストアンサー率37% (112/301)
本文を見る限りだと「任意の行」じゃなく「各行」に思えるんですが。 もしそうなら単にFORでできますがどうでしょうか。 https://www.google.com/search?q=%E3%83%90%E3%83%83%E3%83%81+for+%E8%A1%8C&oq=%E3%83%90%E3%83%83%E3%83%81+for+%E8%A1%8C
お礼
うーん任意だと思います。どこかを"1"とすれば1行目のみの読み込み、"3"とすれば3行目のみの読み込みがしたいです。実際はその数字の部分を変数に置き換え、処理が終わる事に+1加算していくつもりです。検索トップの下記リンクは行いましたが、これは単純に読み込むテキストファイルの各行全て表示されてしまいます。 http://ameblo.jp/mixtest/entry-10575297208.html
- web2525
- ベストアンサー率42% (1219/2850)
お礼
そちらのサイトの方法も行ったのですが、どうもできないです…1行目のみの取得はできたと思いますが、2行目以降の取得はどうすればいいのかわからないです。
お礼
うーんファイルの先頭に3が来る可能性はありますね。コマンドプロンプトに慣れてなく、あまり複雑だとわからないのです・・・別の方法も考えてみます