バッチファイルで*(アスタリスク・ワイルドカード)を文字として扱うにはどうすればいいんですかね?
例:abcde を abcZdeにする。 を文字として認識し Z に置き換え。
遅延環境変数とかエスケープとか色々試しましたが、どうしてもできませんでした。
何か方法がありましたら教えて下さい。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
ちょっと大げさですが、for でやる方法もあります。
CMD
1@echo off 2setlocal 3 4set AA=abc*de 5for /f "delims=* tokens=1,2" %%i in ("%AA%") do set BB=%%iZ%%j 6echo %BB% 7 8endlocal
実行結果
TEXT
1abcZde
投稿2019/07/01 03:07
総合スコア986
0
bat
1@echo off 2FOR /F "usebackq" %%i IN (`powershell -ExecutionPolicy ByPass -c "'abc*de' -replace '*', 'Z'"`) DO SET RESULT=%%i 3echo %RESULT%
投稿2019/07/01 01:14
編集2019/07/01 13:34総合スコア28673
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
仕様的には下記でできそうな気がしますが、だめですね。^*
という文字列を置換してしまいます。
CMD
1set A=ABC*DE 2echo %A:^*=Z% 3→ ABC*DE 4 5set "A=ABC^*DE" 6echo %A:^*=Z% 7→ ABCZDE
ループを回して1文字ずつ見るしかないかと。
CMD
1set A=ABC*DE 2 3set B= 4:LOOP 5if "%A%" == "" goto END 6set C=%A:~0,1% 7if "%C%" == "*" set C=Z 8set B=%B%%C% 9set A=%A:~1% 10goto LOOP 11:END 12set A=%B% 13 14echo %A%
可能なら、バッチスクリプト以外の方法がよいと思います。
#追記
for /f "delims=*
を使うなら、*
の数が25個以下として、
CMD
1set Z=Z 2set A=ABC*DEF 3for /f "delims=* tokens=1-26" %%A in ("%A%") do ( 4 if not "%%Z" == "" ( 5 set A=%%A%Z%%%B%Z%%%C%Z%%%D%Z%%%E%Z%%%F%Z%%%G%Z%%%H%Z%%%I%Z%%%J%Z%%%K%Z%%%L%Z%%%M%Z%%%N%Z%%%O%Z%%%P%Z%%%Q%Z%%%R%Z%%%S%Z%%%T%Z%%%U%Z%%%V%Z%%%W%Z%%%X%Z%%%Y%Z%%%Z 6 ) else if not "%%Y" == "" ( 7 set A=%%A%Z%%%B%Z%%%C%Z%%%D%Z%%%E%Z%%%F%Z%%%G%Z%%%H%Z%%%I%Z%%%J%Z%%%K%Z%%%L%Z%%%M%Z%%%N%Z%%%O%Z%%%P%Z%%%Q%Z%%%R%Z%%%S%Z%%%T%Z%%%U%Z%%%V%Z%%%W%Z%%%X%Z%%%Y 8 ・・・・・中略・・・・・ 9 ) else if not "%%C" == "" ( 10 set A=%%A%Z%%%B 11 ) 12)
ちょっと手で書く気がしませんね。いずれにせよ、個数上限がないと無理です。
投稿2019/07/01 01:05
編集2019/07/01 13:14総合スコア86281
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/01 01:19 編集
2019/07/01 06:06
2019/07/01 06:18
2019/07/01 13:09

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。