2

Windows Batch の SET コマンドでワイルドカードを使用したいので、一致させるために文字列の内容を正確に知る必要はありません。

これは可能ですか?

これがすでに質問されて回答されている場合は、申し訳ありませんが、しばらく検索しましたが、見つかりませんでした。

4

2 に答える 2

4

A: はい。しかし、それは本来あるべきほど強力ではありません。

しかし、最初に、あなたが (まだ) 質問していない質問に答えましょう。これは当然のフォローアップの質問だからです。

Q: 疑問符は、バッチ文字列検索の任意の 1 文字に一致し、SET に置き換えられますか?
A: いいえ。それは通常のキャラクターであり、自分自身とのみ一致します。

アスタリスクはワイルドカードであり、複数の文字に一致しますが、文字列の最初からすべてにのみ一致します。途中ではなく、最後からではありません。

便利な検索:

*x  
*how are you?

上記の 2 つの検索は一致する可能性があります。1 つ目は、最初の "x
" までのすべてに一致します。2 番目のものは、最初の「お元気ですか?」までのすべてに一致します。それは見つけます。

正当だが役に立たない検索:

x*
Hello*
One*Three

上記の 3 つの検索は決して一致しません。奇妙なことに、それらも合法であり、エラーを引き起こしません。
1 つの例外: Hello* と x* はそれ自体に一致しますが、それらが文字列の先頭にある場合に限ります。(ありがとうジェブ!)

コマンド プロンプトで入力または貼り付けできる 2 つの例:

REM 検索と置換の成功。
SET X=こんにちは、私の友人。元気ですか?
SET X=%X:*.=%
ECHO 出力: "%X%"

出力: 「お元気ですか?」

REM 検索と置換の失敗を引き起こす予期しないアクション。
SET X=こんにちは、私の友人。元気ですか?
SET X=%X:.*=%
ECHO 出力: "%X%"

出力: 「こんにちは。お元気ですか?」

論理的には、.* はピリオド以降のすべてのものと一致する必要があり、その結果、文字列は "Hello my friend" に切り捨てられます。ただし、* は文字列の先頭からのみ一致するため、.* は何も一致しないため、文字列は変更されません。

于 2012-07-27T08:21:49.693 に答える