アプリ版:「スタンプのみでお礼する」機能のリリースについて

タイトルの通りなのですが、バッチファイルで置換を行う設定をしているのですが、正規表現とかでも指定できればと思うのですが、色々と試してみるのですがうまくいかず、アドバイス頂けないでしょうか?
具体的には、以下の感じで回しているのですが、この定義だと関係のない空白TABにも@として置換されてしまいます。

for /f "delims=" %%a in (hoge.txt) do (
set line=%%a
set line=!line:^ =@!
echo !line! >> moge.txt


行頭の指定や行末、その他、\wや\d、(a|b|c)などのグループ指定など正規表現で置換の指定とかはできませんでしょうか?
アドバイス、宜しくお願いいたします。

A 回答 (4件)

高機能な正規表現を使いたいなら、PowerShell、Windows Scripitng Host(VBScript/JScript)を使うのが手っ取り早いです。

「Windowsのバッチファイルで正規表現」の回答画像1
    • good
    • 0
この回答へのお礼

有難うございます。
高機能かは分からないのですが、普通に行頭^などは使いたいのですが、バッチファイルとしてxxx.bat内のループで置換指定は無理でしょうか?

お礼日時:2022/12/09 18:28

バッチ処理のみで正規表現は難しいですよ。


 とは云え、個別対応で「関係のない空白TABにも@として置換されてしまいます。」に対応するならば、"tokens=1*" が使えるかも知れません。

 置換でなく表示をカンマで区別した例ですが、こんな動きをします↓
for /F "tokens=1*" %i in ("a b c d") do @echo %i, %j
a, b c d

※a 以外はそのまま渡されるんじゃなかったかと期待。
    • good
    • 0
この回答へのお礼

有難うございます、大変参考になりました。
バッチのみでは難しい(この情報だけでも大変助かります)とのことなので、冗長的になるかもですが、それぞれ書いて試行錯誤してみたいと思います。
カンマ区切りの例もこの後試してみたいと思います。

あまりにも厳しい場合には、何かしらのプログラム経由で対応しようと思いますが、クリック1つでできればと考えておりました…。
有難うございます!!

お礼日時:2022/12/09 20:21

「どうしてもコマンドプロンプトだけ (その他のプログラムは一切使わない) でやりたい」とかいうアレな趣向を持っているのであれば止めはしないけど, 一般人はそれなりなフィルター (sed とか awk とか) を導入すべきだと思うよ.



sed や awk でもアレっぽい雰囲気はあるけど.
    • good
    • 0
この回答へのお礼

有難うございます。
無知で恐縮です、sed とか awk という事なのですが、こちら自体把握していないので調べてみたいと思います。
アドバイス大変有難うございます。mm

>>とかいうアレな趣向を持っているのであれば止めはしないけど,
特にコマンドプロンプト、bat,でなければ…という事ではないのですが、使用しているのがWindowsなので、bat経由でできるのかな?と安易に思ってしまった次第です。

調べてみて難しい場合には、pythonでもなんでも良いのですが、プログラム経由で吐かせることとしたいと思います。
sed、awkについて調べてみたいと思います。
有難うございます。mm

お礼日時:2022/12/09 21:39

バッチファイルの変数展開時の置換機能では正規表現は使えないです。



「先頭の空白を@に置換」なら、
「先頭の1文字目が空白なら、@の後ろに2文字目以降を繋げる」という方法で出来ます。
if "!line:~0,1!"==" " set line=@!line:~1!

あと、
echo !line! >> moge.txt
だと、lineの内容の後に空白1つ付いた物が書き込まれますが、意図通りですか?
    • good
    • 0
この回答へのお礼

有難うございます。
なるほどです、色々と方法があるのですね。大変参考になります。

お礼日時:2022/12/10 17:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A