お世話になっております。
表題の件について、質問させてください。
『とあるファイルに記述されている文字列を一部抜き出して、
別ファイルとして保存する』というバッチファイルを作成していますが、
うまく抜き出すことができないため、ご教示いただければ幸いです。
例)
・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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 入力待ちをして、受け取った正の整数が表す行数だけ既存 4 2022/07/05 10:12
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- その他(プログラミング・Web制作) ファイル名の一部をbatで変更したい batファイルを使って、以下のようにファイル名の一部を変更した 3 2023/02/21 20:09
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) Excel VBA 3 2023/04/22 10:46
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
Windowsのバッチファイルで正規表現の置換方法について…
Windows 10
-
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
-
4
Dosブロンプトでtabを出力したい
その他(プログラミング・Web制作)
-
5
コマンドプロンプトで変数が数字であることを判定する方法
その他(プログラミング・Web制作)
-
6
バッチ処理 特定の文字以降をリネーム
Ruby
-
7
バッチファイルで正規表現を使った置換
その他(プログラミング・Web制作)
-
8
バッチで特定文字が含まれる先頭行を取得したい
Windows Me・NT・2000
-
9
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
10
DOSコマンドでのワイルドカードの使い方
Windows Vista・XP
-
11
バッチファイル 文字列にスペースがある場合
その他(プログラミング・Web制作)
-
12
バッチ処理でファイルの中身を変数に入れるやり方
その他(プログラミング・Web制作)
-
13
コマンドプロンプトによるフォルダ内のファイル存在有無
UNIX・Linux
-
14
バッチファイルで改行の出力
UNIX・Linux
-
15
バッチで指定ファイルの文末に改行コードをつけたい
その他(コンピューター・テクノロジー)
-
16
バッチファイル 二つ上のディレクトリのパス取得
その他(プログラミング・Web制作)
-
17
コマンドプロンプトで変数内に特殊文字がある場合のエスケープ方法
Windows 95・98
-
18
フォルダの中身を全部消したい。
Windows Me・NT・2000
-
19
テキストファイルから最終行の抽出
Windows Me・NT・2000
-
20
html上で、バッチやexeファイルの起動をしたい
ホームページ作成・プログラミング
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA EXCEL あるセルの中の一...
-
バッチファイルの正規表現を利...
-
ASP言語での正規表現の書き方
-
文字列から数値を抽出したいの...
-
C++でofstreamに空白を含む文字...
-
パイソンエラーについて
-
pythonエラー
-
全角入力
-
GoogleAppsScript文字列置換の...
-
全角/半角キーをSendkeys関数で...
-
住宅にカナを入力する際に丁目...
-
CSVファイルの中で、「 , 」カ...
-
マクロを使ってフォルダー内に...
-
メールのcsv添付ファイルの種類...
-
正しいメールアドレスの形式で...
-
プログラミングでは、半角括弧...
-
VBAの文字列の中に”(全角のダブ...
-
エクセルの区切り位置の設定方法
-
C#で空白行を削除する方法
-
メモ帳からエクセルにセル区切...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「何とかで始まり、何とかで終...
-
「abcで始まらない」を正規表現...
-
VBA EXCEL あるセルの中の一...
-
正規表現の否定先読みで、複数...
-
バッチファイルの正規表現を利...
-
角カッコが含まれてるかどうか...
-
正規表現 英数字を1つ以上含む...
-
C++でofstreamに空白を含む文字...
-
VBにおける文字列の部分一致検索
-
Perl CSVファイルの複数条件で...
-
XML::Xpathで部分一致検索をす...
-
指定した文字列を複数含むとい...
-
正規表現にて文字数をチェック...
-
正規表現について
-
CSVファイルの中で、「 , 」カ...
-
英数字のみ全角から半角に変換
-
エクセルで数値を全角文字(カ...
-
EXCELからCSVにすると余計なカ...
-
住宅にカナを入力する際に丁目...
-
Excel VBAでPDFファイルをMicro...
おすすめ情報