• ベストアンサー

set コマンドにおけるワイルドカード(*)の制約について

よろしくお願いします。 OS:Windows XP (プロフェッショナル) MS-DOSコマンドについての質問です。 SETコマンドに文字列の置換機能があるかと思います。 例えば下記のように動きます。 ------------------------------------------------- C:\>set aaa=123456789 C:\>echo %aaa:456=123% 123123789 ------------------------------------------------- ここで、ワイルドカードを使用して下記のようにはできるのですが、 ------------------------------------------------- C:\>set aaa=123456789 C:\>echo %aaa:*9=abc% abc ------------------------------------------------- 下記のように、ワイルドカードを使用して、 「123456789」を「abc」に置換してechoの結果を 「abc」となるようにしたいのですが、結果は 「123456789」のままです。 これは * の使い方がまずいのでしょうか、* を使用する 際の制約が何かあるのでしょうか。 ------------------------------------------------- C:\>set aaa=123456789 C:\>echo %aaa:*345*=abc% 123456789 ------------------------------------------------- ※この質問の目的は、何かを実現したいというのではないです。  MS-DOSでできることをお正月休み中に勉強しています。 アドバイスのほど宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.1

setコマンドのヘルプメッセージに、 環境変数の置換は、次のように拡張されます: %PATH:文字列1=文字列2% は、PATH 環境変数を展開し、 a.その結果に含まれるすべての "文字列1" を"文字列2" に置き換えます。 b."文字列2" に空の文字列を指定すると、展開された出力からすべての "文字列1" を削除することができます。 c."文字列1"をアスタリスクで始め、展開された出力の先頭から、文字列1 の残りの部分が最初に現れるまでのすべてを一致させることもできます。 とあり(わかりやすいように、a~cに分けました)、 C:\>echo %aaa:345*=abc% C:\>echo %aaa:*345*9=abc% と入力しても、結果はいずれも、 123456789 となることから、アスタリスクが使えるのは、文字列1の先頭のみのようです。

nao-k
質問者

お礼

アドバイスありがとうございます。 set /? を見て、うすうすそのような気がしてはいましたが、 やはりそうなのですね。

その他の回答 (1)

  • soaikats
  • ベストアンサー率58% (14/24)
回答No.2

制約だと思います。 コマンドプロンプトの「set /?」によると、 「%PATH:文字列1=文字列2%」の説明部分に 文字列1は「*345」のような 前方の「*」入力なら可能とあるようです。

nao-k
質問者

お礼

アドバイスありがとうございます。 set /? を見て、そのような気はしていたのですが。 自分のやり方がおかしいのでは?と思い質問してみました。