
お世話になっております。
表題の件について、質問させてください。
『とあるファイルに記述されている文字列を一部抜き出して、
別ファイルとして保存する』というバッチファイルを作成していますが、
うまく抜き出すことができないため、ご教示いただければ幸いです。
例)
・filelist.txt
.\aaa\aaa.txt
.\aaa\bbb.txt
上記ファイルに対し、「.\aaa\aaa.txt」の一行のみ取り出した
「aaafile.txt」というファイルを生成したいと考えております。
現在、私が考えたコマンドは下記になります。
for /f %%A in ('findstr /r /c:"aaa[^\\].*" filelist.txt') do echo %%A > aaafile.txt
このコマンドを実行すると、「.\aaa\bbb.txt」まで抽出してしまい、
意図通りとなりません。
初歩的なミスかもしれませんが、
何卒、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
>初歩的なミスかもしれませんが
DOSには正規表現の処理はありません。よく、このカテゴリーに「正規表現」だけを示して投稿する馬鹿がいますが、プログラム言語や、スクリプト言語や、エンジン(シェルとか)とかインタプリターの仕様によって違います。似せて作ってあるだけで、それぞれのエンジンで解釈が違います。
なので、回答があっても、適当に書き込んでいるだけのようで、本来もっと別な、いいやり方があるけど、そういう馬鹿なやつらには、この程度いいと、みんなが思っているものです。
本題です。
DOSなど、シェルにはヘルプが付いています。特にCUIはUNIX時代から OnLine が充実していますので、まずそれを活用しましょう。
>cmd /?
でDOSのシェルである cmd の仕様および使い方がでます。そこに正規表現の記述がありますでしょうか?
次に
>for /?
出力される説明に正規表現がありますでしょうか? 無いですよね。なので正規表現は使えません。例としては findstr が使えます。使えると言うレベルでいると、コマンドのオプションで引数に該当する文字列を、正規表現で指定できる程度です。
>findstr /?
で確認してください。
抜粋:
/R 検索文字列を正規表現として使用します
なんて仕様にあるので使えます。このような記述がないと使えません。
なお、
/c
ですが、
/C:文字列 指定された文字列をリテラル検索文字列として使用します。
などとなっています。自分は /r で正規表現と勝手に思い込んでいるようですが、/c はリテラルとして処理されています。というより、エラーになっていませんか?
リテラルと、正規表現は一緒には使えません。どちらからを指定することになります。
https://www.google.co.jp/search?hl=ja&q=%E3%83%A …
を見る事ですね。書式にあうように指定してください。
/r "abc" [file name]
となります。リテラルで正規表現を使うような仕様はめったにありません。
ご回答ありがとうございます。
ご指摘の通り、/r "abc" [file name]と/c:を省いた書式でうまく動作しました。
勉強不足でご迷惑をおかけし、申し訳ありませんでした。
No.3
- 回答日時:
やってみましたが、.\aaa\aaa.txt だけが抽出されます。
何か勘違いがあるのでは?そもそも、
findstr /r /c:"aaa[^\\]" filelist.txt > aaafile.txt
でいいのでは?
for /f %%A in ('findstr /r /c:"aaa[^\\].*" filelist.txt') do echo %%A > aaafile.txt
だと、マッチする行がもし複数行あるとecho毎にaaafile.txtが上書きされるので最後の行しか残りませんが。
なお、/c: の意味ですが、"検索文字列" に空白が含まれると、「または」の意味になるので、空白をそのまま空白として扱いたいときにつけるものです。今回は空白が含まれないので不要。
ご回答ありがとうございます。
おっしゃる通り、forで回す必要はありませんでした。
コマンドの理解が不十分で、申し訳ありません。
No.2
- 回答日時:
No1ですが、
https://www.google.co.jp/search?hl=ja&q=%E6%AD%A …
などと検索すればわかるかと。”正規化”と”リテラル”は語弊がありますが、反意後としてみる必要があります。
正規化とは、ある意味フォーマット抽象化して、そのフォーマットに合う物を探すときに、プログラム言語では使われます。もちろん、他の分野や言い回しによっては、違う意味がありますが、少なくともプログラム言語では、そのように使われます。
よく、”正規化する” ”ノーマライズする”と言う表現をします。これは、ある特定フォーマットに正すと言う事です。
その意味での”正規表現”です。
その反面、リテラルは、データーの文字列を直接指定する事になります。
https://www.google.co.jp/search?hl=ja&q=%E3%83%A …
のうち
http://e-words.jp/w/E383AAE38386E383A9E383AB.html
なんて、簡潔にそのことを説明しています。
「直接表記する際の書式」 は 「データーの文字列を直接指定する事になります。」です
何を、どのようにヒットさせたいかで、使い分ける事柄です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
Windowsのバッチファイルで正規表現の置換方法について…
Windows 10
-
バッチファイルで正規表現を使った置換
その他(プログラミング・Web制作)
-
-
4
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
5
コマンドプロンプトで変数が数字であることを判定する方法
その他(プログラミング・Web制作)
-
6
バッチ処理でファイルの中身を変数に入れるやり方
その他(プログラミング・Web制作)
-
7
Dosブロンプトでtabを出力したい
その他(プログラミング・Web制作)
-
8
バッチでCSVを処理する時、空の項目があった場合
その他(プログラミング・Web制作)
-
9
バッチで特定文字が含まれる先頭行を取得したい
Windows Me・NT・2000
-
10
バッチファイル内置換
その他(開発・運用・管理)
-
11
oracle spool SJIS → UTF-8
Oracle
-
12
バッチファイルで変数の中身をファイル出力したい
UNIX・Linux
-
13
findstrのerrorlevel
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
プログラミングを学べる!?進化している子どものおもちゃについて専門家に聞いた!
プログラミングを学べるレゴブロックがあることはご存知だろうか。レゴに限らず最近のおもちゃには、プログラミングの要素がどんどん取り入れられているようだ。「教えて!goo」にも、「プログラミングを学べる子供...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイルの正規表現を利...
-
正規表現で
-
角カッコが含まれてるかどうか...
-
正規表現の否定先読みで、複数...
-
「何とかで始まり、何とかで終...
-
VBA EXCEL あるセルの中の一...
-
CSVファイルの中で、「 , 」カ...
-
エクセルで数値を全角文字(カ...
-
英数字のみ全角から半角に変換
-
各項目がダブルクォーテーショ...
-
xmlファイル内の文字列置換
-
CSVの定義
-
IEからEdgeへの移行に伴うIMEの...
-
VBA 置換文字がみつからない時
-
WORDで改ページすると時々グレ...
-
[VBA][Excel]クリップボードか...
-
データにカンマが入ったCSVデー...
-
C#でcsvファイルの列を入れ替え...
-
csvデータのダブルクォーテーシ...
-
正規表現で、全角文字を半角文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「何とかで始まり、何とかで終...
-
正規表現の否定先読みで、複数...
-
VBA EXCEL あるセルの中の一...
-
角カッコが含まれてるかどうか...
-
Perlで一行で文字列の置き換え
-
「abcで始まらない」を正規表現...
-
正規表現 英数字を1つ以上含む...
-
文字列の一致について
-
浮動小数点数について
-
名前の重複チェック
-
正規表現での置換
-
マクロ・VB得意な人へ。指定し...
-
文字列検索のAND条件を引数にし...
-
一度だけ置換えたい
-
Perlの壁
-
バッチファイルの正規表現を利...
-
正規表現のパターンマッチ
-
|。ってなんですか? 正規表現
-
.htaccessで特定のドメインを弾...
-
Excelにある特定のRange名があ...
おすすめ情報