質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

3回答

18940閲覧

バッチで*(アスタリスク・ワイルドカード)を文字として扱うには?

kankan0

総合スコア23

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

1グッド

1クリップ

投稿2019/06/30 16:50

バッチファイルで*(アスタリスク・ワイルドカード)を文字として扱うにはどうすればいいんですかね?

例:abcde を abcZdeにする。 を文字として認識し Z に置き換え。

遅延環境変数とかエスケープとか色々試しましたが、どうしてもできませんでした。

何か方法がありましたら教えて下さい。

testset👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nskydiving

2019/06/30 22:17

具体的に試したコマンドはどんなものでしょうか?
guest

回答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

Bull

総合スコア986

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kankan0

2019/07/01 12:44

ありがとうございます。 delimsが*を文字として認識してくれるとは気付きませんでした。 *が入っている文字列と入っていない文字列のどちらにも使えるような記述を目指していますので、 もう少し考えてみます。
guest

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
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/07/01 13:36 編集

コメント削除
kankan0

2019/07/02 20:28

ありがとうございます。 やはりパワーシェルの力を借りるのが現実的ですかね。 パワーシェルについての知識があまりありませんので、勉強しないとです。
Zuishin

2019/07/02 23:04 編集

バッチの知識はもう勉強しなくても十分あるんでしょうか? どのみち勉強が必要なら、同じことではありませんか? バッチは外部コマンドを呼び出すためのもの。 PowerShell 等を呼び出すのが本来の使い方です。 そして PowerShell を使えばバッチはたいていの場合不要になります。 覚えない理由がありません。
guest

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
otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2019/07/01 01:19 編集

ググってみると、エスケープは前ではなく後ろ(*^)な気がします。
otn

2019/07/01 03:27

=をエスケープすると言う事ですか?どういう意図なんでしょうね。
sazi

2019/07/01 06:06

set "A=ABC*^DE" echo %A:*^ =Z% → ABC*DE
sazi

2019/07/01 06:18

^の前後は関係なさそうです、=の前に空白入れれば同じでした。 set "A=ABC^*DE" echo %A:^* =Z% → ABC*DE
kankan0

2019/07/01 12:36

set "A=ABC^*DE" echo %A:^*=Z% であれば、置換はできるもののあらかじめ文字列の*の前にエスケープを入れないといけないようですね。
otn

2019/07/01 13:08

はい。置換では無理です。
sazi

2019/07/01 13:09

*を文字として認識させてZに変換ですね。盛大に勘違いでした。すみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問