
No.4ベストアンサー
- 回答日時:
環境変数の遅延展開を使用すれば置換できます。
こんな感じです。XP Proで動作確認しました。
setlocal ENABLEDELAYEDEXPANSION
set TEST1=ABC
set TEST2=!TEST1:B=%%!
echo %TEST2%
ありがとうございます。たしかにこれでいけそうです!!
同様なことを一行ずつの実行でコマンドプロンプトで試していたのですが、
それだとうまくいかなかったので諦めていました。
バッチファイルとして実行させるとうまくいくようですね…
遅延環境変数を使うと"%"が区切り用の文字と判定されなくなるのが
おもしろいところですね。
No.5
- 回答日時:
#2,3です。
すいません。回答ではないのですが、#4 さんの回答、素晴らしいですね!
なるほど遅延展開って、こう使うんだ。
おかげで私も長年のモヤモヤを晴らせました。
ありがとうございます。
No.3
- 回答日時:
#1 さんの回答にダウト。
(ごめんなさい)
>echo %TEST1:ABC=%A%C
これは %TEST1:ABC=% で空文字ができて、その後ろに A%C があるため、結果として A%C になっているだけですね。
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.1
- 回答日時:
なぜかこうはできました
C:\Windows\system32>set TEST1=ABC
C:\Windows\system32>echo %TEST1:ABC=%A%C
A%C
この回答への補足
No2への補足入力ですが、一度入力すると再度編集・追記できないクソ仕様なので、ここに記入させていただきます
sh版のロジックは既に作成してあるので、cygwinが使えれば速攻解決なのですが、cygwinが使用できない環境でも
利用できるようにバッチで作成しようとしています。
遅延環境変数の展開など、shの知識でコーディングをしていると確実にはまりますね…
DOS時代の簡易機能から増改築を繰り返した名残でしょうか!?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows10のタスクスケジューラ...
-
バッチでEnterを認識させ...
-
リモートデスクトップの取り合...
-
DOSコマンドのforで空白行をス...
-
バッチファイルを実行後、終了...
-
コマンドの結果を変数に入れたい
-
バッチでの引数値の桁数削除
-
oracleのimp-00002エラーについて
-
Windowsのバッチ処理のループカ...
-
バッチファイルを常に管理者権...
-
ホスト名をファイル名として保...
-
バッチでのレジストリPath環境...
-
batファイルで、call使っても戻...
-
バッチ実行を意図的に失敗させ...
-
バッチファイルでPC情報を取得する
-
バッチ実行時にバッチのファイ...
-
WindowsのRANDOM関数を用いたバ...
-
バッチ(バッジ)をつける目的...
-
ネットワークドライブを見るバ...
-
拡張子はなぜ、大文字と小文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10のタスクスケジューラ...
-
バッチファイルを実行後、終了...
-
DOSコマンドのforで空白行をス...
-
コマンドの結果を変数に入れたい
-
リモートデスクトップの取り合...
-
oracleのimp-00002エラーについて
-
DHCP設定バッチnetshコマンドに...
-
batファイルで、call使っても戻...
-
batファイルを実行してコマンド...
-
バッチ実行を意図的に失敗させ...
-
バッチファイルを常に管理者権...
-
バッチでEnterを認識させ...
-
バッチファイルでPC情報を取得する
-
WinSCPがタスクスケジューラで...
-
実行結果を戻り値で取得したい
-
バッチ実行時にバッチのファイ...
-
batが実行できない
-
WMICでリモートでバッチが実行...
-
コマンドプロンプトで最新のフ...
-
bat実行中に引数1の内容を変更...
おすすめ情報