No.1
- 回答日時:
なぜかこうはできました
C:\Windows\system32>set TEST1=ABC
C:\Windows\system32>echo %TEST1:ABC=%A%C
A%C
この回答への補足
No2への補足入力ですが、一度入力すると再度編集・追記できないクソ仕様なので、ここに記入させていただきます
sh版のロジックは既に作成してあるので、cygwinが使えれば速攻解決なのですが、cygwinが使用できない環境でも
利用できるようにバッチで作成しようとしています。
遅延環境変数の展開など、shの知識でコーディングをしていると確実にはまりますね…
DOS時代の簡易機能から増改築を繰り返した名残でしょうか!?
No.2
- 回答日時:
自分も何度か挑戦した事があります。
例えば、DOSではエスケープするのに "^"(キャレット)を使うので、それを試してみたりとか。
で、結果としては、頓挫しました。
多分、無理ではないかと思っています。
代替案としては。
何かユーティリティをインストールしてもよい環境なら
→cygwinなどを入れて tr や sed, awk , perl などを使う。
インストールが許されない環境なら
→VBScriptなどでReplace関数で置換するバッチを作って代替。
ex) cygwin の tr.exe
set TEST1=ABC
echo %TEST1% | tr B %
A%C
この回答への補足
いろいろ検索してみました
元ネタ
http://fdays.blogspot.com/2007/11/blog-post.html
@echo
set before=ABC
set search=B
set replace=%%
set after=
set replace_wk=
:loop
if "%before%" == "" goto :end
for /f "tokens=1* delims=%search%" %%A in ("%before%") do (
set after=%after%%replace_wk%%%A
set before=%%B
set replace_wk=%replace%
)
goto :loop
:end
echo %after%
実行結果
A%C
なんか泣けてくる…
ありがとうございます。
私も "^"(キャレット)を試して玉砕しました。
単純に次の%を探してそこを範囲終了と見なすような動きです
中途半端な仕様ですね…
No.3
- 回答日時:
#1 さんの回答にダウト。
(ごめんなさい)
>echo %TEST1:ABC=%A%C
これは %TEST1:ABC=% で空文字ができて、その後ろに A%C があるため、結果として A%C になっているだけですね。
No.4ベストアンサー
- 回答日時:
環境変数の遅延展開を使用すれば置換できます。
こんな感じです。XP Proで動作確認しました。
setlocal ENABLEDELAYEDEXPANSION
set TEST1=ABC
set TEST2=!TEST1:B=%%!
echo %TEST2%
ありがとうございます。たしかにこれでいけそうです!!
同様なことを一行ずつの実行でコマンドプロンプトで試していたのですが、
それだとうまくいかなかったので諦めていました。
バッチファイルとして実行させるとうまくいくようですね…
遅延環境変数を使うと"%"が区切り用の文字と判定されなくなるのが
おもしろいところですね。
No.5
- 回答日時:
#2,3です。
すいません。回答ではないのですが、#4 さんの回答、素晴らしいですね!
なるほど遅延展開って、こう使うんだ。
おかげで私も長年のモヤモヤを晴らせました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(OS) Windowsで大量の画像サイズを半自動で変更する方法 6 2023/02/17 08:45
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- Excel(エクセル) フォルダ階層が深いファイルの拡張子の一括変換 2 2022/12/23 18:40
- その他(セキュリティ) Software Distribution folder の rename 手順 1 2022/08/19 13:08
- UNIX・Linux VirtualBox ゲストOSにPC内蔵HDDのパーティションをマウントする方法は? 2 2023/05/06 22:52
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- 一眼レフカメラ 「Imaging Edge」を手動起動せず、ARWファイルを最高画質JPEGへ変換する方法は? 2 2022/08/05 11:38
- Windows 10 renameコマンドでファイル名からアンダースコアを消す方法 5 2023/04/24 13:33
- Windows 10 VirtualBox 7のゲストOSでの物理HDDパーティションのマウント方法 2 2023/05/04 13:01
- Excel(エクセル) Excelの置換が上手くいかない Microsoft® Excel® 2019 MSO (バージョン 5 2022/08/17 22:26
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
batである文字列内に特定の文字列が含まれているか確認したい
その他(プログラミング・Web制作)
-
Windowsのバッチファイルで正規表現の置換方法について…
Windows 10
-
DOSのバッチで、テキストファイル中の文字を置換したい
その他(プログラミング・Web制作)
-
-
4
バッチ処理でファイルの中身を変数に入れるやり方
その他(プログラミング・Web制作)
-
5
バッチでテキストファイルから任意の行のみ取得したい
その他(プログラミング・Web制作)
-
6
コマンドプロンプトで変数内に特殊文字がある場合のエスケープ方法
Windows 95・98
-
7
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
8
Dosブロンプトでtabを出力したい
その他(プログラミング・Web制作)
-
9
コマンドプロンプトで相対パスの取得
その他(コンピューター・テクノロジー)
-
10
バッチファイルの正規表現を利用した文字列検索
その他(プログラミング・Web制作)
-
11
バッチファイル内置換
その他(開発・運用・管理)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DHCP設定バッチnetshコマンドに...
-
batファイルで、call使っても戻...
-
Windows10のタスクスケジューラ...
-
リモートデスクトップの取り合...
-
oracleのimp-00002エラーについて
-
batファイルを実行してコマンド...
-
コマンドプロンプトで別ユーザ...
-
バッチでEnterを認識させ...
-
順番にPINGを飛ばすバッチ
-
バッチプログラムについて(編...
-
ホスト名をファイル名として保...
-
バッチ実行を意図的に失敗させ...
-
バッチファイルで無限ループ
-
何のピンバッチでしょうか?JAT...
-
バッチでのレジストリPath環境...
-
batが実行できない
-
バッチファイルでPC情報を取得する
-
ログオンユーザを簡単に切り替え
-
バッチファイルで自身の名前を...
-
コマンドの結果を変数に入れたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10のタスクスケジューラ...
-
バッチファイルを実行後、終了...
-
batファイルで、call使っても戻...
-
リモートデスクトップの取り合...
-
DOSコマンドのforで空白行をス...
-
DHCP設定バッチnetshコマンドに...
-
oracleのimp-00002エラーについて
-
batファイルを実行してコマンド...
-
バッチでEnterを認識させ...
-
バッチ実行を意図的に失敗させ...
-
バッチプログラムについて(編...
-
batが実行できない
-
コマンドの結果を変数に入れたい
-
バッチファイルでエクセルのマ...
-
バッチファイルでPC情報を取得する
-
コマンドプロンプトで最新のフ...
-
WindowsのRANDOM関数を用いたバ...
-
ログオンユーザを簡単に切り替え
-
バッチ実行時にバッチのファイ...
-
DBサーバとバッチサーバ
おすすめ情報