Windows Batch の SET コマンドでワイルドカードを使用したいので、一致させるために文字列の内容を正確に知る必要はありません。
これは可能ですか?
これがすでに質問されて回答されている場合は、申し訳ありませんが、しばらく検索しましたが、見つかりませんでした。
Windows Batch の SET コマンドでワイルドカードを使用したいので、一致させるために文字列の内容を正確に知る必要はありません。
これは可能ですか?
これがすでに質問されて回答されている場合は、申し訳ありませんが、しばらく検索しましたが、見つかりませんでした。
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" に切り捨てられます。ただし、* は文字列の先頭からのみ一致するため、.* は何も一致しないため、文字列は変更されません。