
バッチファイルで、置換をしたいのですが、"="と"<"の置換が出来ません。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/11 11:05
- Windows 10 Windowsのバッチファイルで正規表現の置換方法について… 4 2022/12/09 16:00
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Visual Basic(VBA) VBA GetAttrについて教えてください 2 2022/12/22 15:25
- Visual Basic(VBA) VBA シート上にドロップダウンリストを作り、予め指定値をセットしたいのですが 1 2023/03/25 15:15
- UNIX・Linux ディレクトリをのスラッシュをとる方法 3 2022/05/31 16:20
- Excel(エクセル) エクセルのマクロが途中の行から適用されない 2 2022/07/09 20:25
このQ&Aを見た人はこんなQ&Aも見ています
-
Windowsのバッチファイルで正規表現の置換方法について…
Windows 10
-
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
コマンドプロンプトで変数内に特殊文字がある場合のエスケープ方法
Windows 95・98
-
-
4
バッチ処理でファイルの中身を変数に入れるやり方
その他(プログラミング・Web制作)
-
5
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
6
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
7
バッチファイル 文字列にスペースがある場合
その他(プログラミング・Web制作)
-
8
バッチからsqlplusの接続エラーの検知について
その他(プログラミング・Web制作)
-
9
echoの出力の最後のスペースを除去したい
iOS
-
10
Dosブロンプトでtabを出力したい
その他(プログラミング・Web制作)
-
11
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
12
バッチファイルでテキストファイルの1行目だけ変更
その他(プログラミング・Web制作)
-
13
バッチファイルで変数の中身をファイル出力したい
UNIX・Linux
-
14
DOSバッチで文字数カウント
Windows 10
-
15
コマンドプロンプトでファイル名に含まれるスペースを別の文字に置換したい
その他(プログラミング・Web制作)
-
16
バッチファイルで文字列削除について
その他(プログラミング・Web制作)
-
17
バッチ処理 特定の文字以降をリネーム
Ruby
-
18
DOSコマンドのforで空白行をスキップしない
UNIX・Linux
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル内置換
-
cron で rsync が実行できない
-
メーリングリスト宛てのメール...
-
linuxのsshの反応が非常に遅い。
-
OS インストール場所確認
-
累積動作時間とはなんですか?
-
バッチスクリプト処理でエラー...
-
Vmware Toolsのインストール方...
-
glibのインストールについて
-
Basp21を使用してメール送信が...
-
CygwinをインストールしたけどX...
-
ソフトのインストール場所って...
-
エクセルVBA 実行時エラー 5029...
-
バッチファイルで多重起動を防ぐ
-
USB接続カードリーダー
-
フロッピーディスクの読み込み方法
-
illustratorを日本語仕様にする...
-
cygwinでno such file or direc...
-
scriptコマンドで出力したログ...
-
Androidエミュレータでレーシン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル内置換
-
exeファイルの実行結果をテキス...
-
linuxのsshの反応が非常に遅い。
-
コマンド実行結果のファイル出力
-
USBメモリ内のバッチで書き出す...
-
メーリングリスト宛てのメール...
-
batファイル 行った履歴をテキ...
-
【Mac/Xcode】カレントディレク...
-
batが動かない
-
cron で rsync が実行できない
-
デバッグ停止中 一つ戻る
-
dsmoveコマンドをBATファイルで...
-
Mac OS ventura のapplescript...
-
リモートコンピュータの再起動...
-
IIS(アイルサーバー)で拡張子...
-
ftpのgetが正常できる方法について
-
コマンドプロンプトのFOR文がダ...
-
シェルスクリプト
-
バッチファイル 文字列操作の...
-
cronを使って、CSVファイルのデ...
おすすめ情報