
バッチファイルで、置換をしたいのですが、"="と"<"の置換が出来ません。
ping出力を「file.txt」へ保存し、保存した「file.txt」を一行づつ読み出し下記を実行しています。
for /f "delims=" %%a in ( orig ) do (
set line=%%a
call :sub
)
:sub
set tmp=%line%
set tmp=%tmp:<=,%
set tmp=%tmp:= =,,%
set tmp=%tmp:"時間" =,%
set tmp=%tmp:ms=,ms%
echo %tmp%>>%CSV_Name%
goto :EOF
:end
置換出来ないのは、"=" と "<"の文字だけが置換出来ません。
ネットで調べたのですが、"^" でエスケープしても、""二重引用部でくくっても、正しく置換でき有ません。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
まだ閉じられていなかったので
--------- a.bat ----------------------------
@echo off
setlocal
type NUL> b.csv
for /f "usebackq tokens=* delims=" %%a in (`ping 192.168.XXX.XXX`) do (
call :sub "%%a"
)
goto :EOF
:sub
set tmp=%1
set tmp=%tmp:<=,%
set tmp=%tmp:\= =,,%
set tmp=%tmp:時間 =,%
set tmp=%tmp:ms=,ms%
echo %1
echo %tmp%
echo\
echo %tmp:~1,-1%>> b.csv
goto :EOF
endlocal
-------------------------------
こんな感じだろうか? 前後にどのように使っていて、どのように使用するのか明確でないので、とりあえず、単独で動作するようにした。
setlocal /?
for /?
set /?
call /?
をそれぞれ実行し、使用方法を熟知すること。とくに setlocal は重要。またエスケープが必要な文字は、DOSの仕様がくそなので、思わぬ動作になります。変数にセットして扱う場合と、for コマンドなどを使用して扱う場合と、多少違う。つまり、コマンドマター的な所が多い。なので
”<” はファイルからfor を読み込んだ場合、そのまま、変数で扱えるが
set a=a<
なんてするとエラーになって扱えない。だが、
set a="a<"
などと値にダブルクォートすると、エスケープしてくれる。これは ”|” などともまた、対応が変わってくる。
set コマンドでのエスケープ文字は"\" 半角の円マーク(\ -> バックスラッシュとも言う)
これは、findstr と同じ。コマンドの仕様をそれぞれ把握してゆくと、いろんな整合性が取れていないことが見つかってくる。
まあ、DOSだけでなく、フレームワークを組み込むようなC++、Java でも似たような経験をする方は多いが。 WSHでも似たような事はたくさんある。仕方ないんかもしれない。
なお、set "a=a<" というやり方もあるが、扱いによっては思わぬ落とし穴があり、変数の値をエスケープし扱えるようにはなっていない。なので、その後もダブルクォートで式を記述する必要がでてくる。実行したカレントフォルダーのファイルリストを見ると意味がわかるはず。
値をクォーとする方が、動作が予測できます(しやすい)。
前回提示したスクリプトでダブルクォーとしなくても”<”はエラーになっていない。今回は引数に1行全部を渡すので、forで取得した値をダブルクォーとしている。
そう前回のはなぜかあなたが記載したスクリプトに line と言う変数を設定しているにもかかわらず、 tmp と言う変数に格納している。それは必要ない。 line をそのまま使えばいい。今回のように、引数に渡したとき %1 で受け取る必要があり、それは
%var:a=b%
の置き換えができなため再度宣言する必要がある。
No.2
- 回答日時:
= の置換は無理です。
< は、
set "tmp=%line%"
set "tmp=%tmp:<=,%"
のように " で囲めば出来ます。
あと、forループの後に、goto :EOF を入れないと処理がおかしい。
No.1
- 回答日時:
少し改造しています
--------------------
@echo off
setlocal
for /f "delims=" %%a in ( a.txt ) do (
set line=%%a
call :sub
)
goto :EOF
:sub
echo 1 line=%line%
set tmp=%line%
echo 2
set tmp=%tmp:<=,%
echo 3
set tmp=%tmp:= =,,%
echo 4
set tmp=%tmp:"時間" =,%
echo 5
set tmp=%tmp:ms=,ms%
echo 6
echo %tmp%>>b.txt
echo 7
goto :EOF
:end
endlocal
------------------
なにがいいたいか分かるかと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Windowsのバッチファイルで正規表現の置換方法について…
Windows 10
-
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
バッチ処理でファイルの中身を変数に入れるやり方
その他(プログラミング・Web制作)
-
-
4
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
5
コマンドプロンプトで変数内に特殊文字がある場合のエスケープ方法
Windows 95・98
-
6
Dosブロンプトでtabを出力したい
その他(プログラミング・Web制作)
-
7
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
8
バッチファイル 文字列にスペースがある場合
その他(プログラミング・Web制作)
-
9
echoの出力の最後のスペースを除去したい
iOS
-
10
DOSコマンドのforで空白行をスキップしない
UNIX・Linux
-
11
バッチファイルで変数の中身をファイル出力したい
UNIX・Linux
-
12
del で確認なしで削除した
Windows Me・NT・2000
-
13
DOSバッチで文字数カウント
Windows 10
-
14
ファイルの最後に文字列挿入
その他(プログラミング・Web制作)
-
15
batファイル処理でのテキストファイルの内容を編集
その他(コンピューター・テクノロジー)
-
16
Dirコマンドでフォルダ内ファイルの合計サイズをだすには?(コマンドプロンプトにて)
UNIX・Linux
-
17
バッチファイル テキストファイル内の最後の\\以下を削除したい
その他(プログラミング・Web制作)
-
18
テキストファイルの特定行、特定列に文字を挿入
Windows Me・NT・2000
-
19
sqlに記述できない文字
PostgreSQL
-
20
exeファイルの中身を見ることは可能ですか?
フリーソフト
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル内置換
-
batが動かない
-
メーリングリスト宛てのメール...
-
aptでインストールしたプログラ...
-
NERO9のアンインストールについて
-
Linux環境変数設定(putenv?se...
-
pkg-config のPKG_CONFIG_PATH...
-
バッチスクリプト処理でエラー...
-
誰かにサーバにあるデータを消...
-
Ngraphについて
-
OS インストール場所確認
-
自動釣銭機(富士電機ECS777)の...
-
フロッピーディスクの読み込み方法
-
7-zip22.01(x64)使用時に起きた...
-
Winでソフトのシリアル番号を調...
-
ソフトのインストール場所って...
-
MySQLへのDB::connectで、faile...
-
バッチファイルでのスペースの入力
-
大塚商会で新しくシステム、ス...
-
共有ライブラリが見つからない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メーリングリスト宛てのメール...
-
バッチファイル内置換
-
exeファイルの実行結果をテキス...
-
batファイル 行った履歴をテキ...
-
USBメモリ内のバッチで書き出す...
-
linuxのsshの反応が非常に遅い。
-
コマンド実行結果のファイル出力
-
batが動かない
-
cronを使って、CSVファイルのデ...
-
【Mac/Xcode】カレントディレク...
-
linux環境にて、ある特定の行に...
-
プログラムでTAを制御するコマ...
-
Mac OS ventura のapplescript...
-
コンソールアプリの入出力制御
-
時刻の同期について
-
バッチ処理(for文)について
-
PowerShellで自分が書いたコマ...
-
ソフトのインストール場所って...
-
バッチスクリプト処理でエラー...
-
フロッピーディスクの読み込み方法
おすすめ情報