質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
エスケープ処理

エスケープ処理とは、一連の文字や一文字に対して、一定の規則に従って別の意味を適用する処理過程です。

Q&A

解決済

1回答

4867閲覧

バッチファイルでのエスケープ文字

uer03108

総合スコア194

エスケープ処理

エスケープ処理とは、一連の文字や一文字に対して、一定の規則に従って別の意味を適用する処理過程です。

0グッド

0クリップ

投稿2017/10/14 15:55

下記の様なファイルを読み込むバッチファイルを作成しました。
表示結果の様に
1."!"が表示されない
2.";"の行が表示されない
という結果になったのですが、表示させることは出来るでしょうか。
2については、仕様?

sample.bat

dos

1@echo off 2 3rem スクリプトが置かれている場所をカレントディレクトリにする 4cd /d %~dp0 5 6rem 遅延環境変数の宣言 7setlocal enabledelayedexpansion 8 9rem ファイル名 10SET file=sample.txt 11 12rem 1行ずつ読み込む 13for /f "delims=" %%l in (%file%) do ( 14 15 set s=%%l 16 17 echo %%l 18 echo !s! 19 echo ------------ 20)

sample.txt

text

1!テスト1 2;test2 3@test3 4:テスト4 5%test5 6

表示結果

dos

1C:\Users\test>sample.bat 2テスト1 3テスト1 4------------ 5@test3 6@test3 7------------ 8:テスト4 9:テスト4 10------------ 11%test5 12%test5 13------------

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

1は、enabledelayedexpansionをしているためです。!の解釈は%%lの展開後に行われるので、
set s=!test1となり、!が対応する!が無いとう事で削除されます。
echoも同様。

2は、seteolオプションのデフォルトが;のため、行の先頭が;の行は読み飛ばされます。
行の先頭に絶対に現れない文字があるなら、それをeol=で指定すれば良いです。delimsと違って空に設定することは出来なさそうです。

バッチスクリプトだけでは、ファイルの内容に前提(この文字が現れないとか)がないと読み込めません。
例えば空行を読み込むのは無理。

投稿2017/10/14 16:24

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uer03108

2017/10/15 04:51

有難うございますm(_ _)m よく分かりました。
otn

2020/12/28 09:55

1については、このコードだと単に遅延環境変数展開を使わなければ良いだけですが、有効にしたい何らかの理由があるのなら、その理由に応じて、ケースバイケースで対応します。対応不能のケースもあるかも。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問