質問: windowsのrenameコマンドはワイルドカードをどのように解釈しますか? windowsのrename(ren)コマンドはワイルドカードをどのように解釈しますか?組み込みのhelp機能は役に立ちません - ワイルドカードを扱うことはまったくありません。 microsoftテクニカル_ xpオンラインヘルプ はそれほど良くありません。これがワイルドカードに関して言えることすべてです。 "どちらのファイル名パラメータでもワイルドカード(*と?)を使用できます。filename2でワイルドカードを使用すると、ワイルドカードで表される文字はfilename1の対応する文字と同じになります。" それほど助けにはならない - ステートメントを解釈することができる多くの方法がある。私はfilename2パラメータでワイルドカードをうまく使うことができましたが、いつも試行錯誤されてきました。何がうまくいくのか、何がうまくいかないのか、私は予想できませんでした。多くの場合、必要に応じて新しい名前をそれぞれ作成できるように、各名前を解析するforループを含む小さなバッチスクリプトを書くことに頼らなければなりませんでした。あまり便利ではありません。ワイルドカードの処理方法に関する規則を知っていれば、それほど頻繁にバッチ処理を行わなくてもrenameコマンドをより効果的に使用できると思います。もちろん、ルールを知っていることもバッチ開発に役立ちます。(はい、これは私が一対の質問と回答を投稿しているケースです。私はルールを知らないことにうんざりして自分で実験することにしました。
回答: 私はワイルドカードのファイル名を隠すためにbasicでこのコードを書くことに成功しました:rem inputs a filename and matches wildcards returning masked output filename. function masknewname$ (path$, mask$) if path$ = "" then exit function if instr(path$, "?") or instr(path$, "*") then exit function x = 0 r$ = "" for m = 0 to len(mask$) - 1 ch$ = mid$(mask$, m + 1, 1) q$ = mid$(path$, x + 1, 1) z$ = mid$(mask$, m + 2, 1) if ch$ <> "." and ch$ <> "*" and ch$ <> "?" then if len(q$) and q$ <> "." then x = x + 1 r$ = r$ + ch$ else if ch$ = "?" then if len(q$) and q$ <> "." then r$ = r$ + q$: x = x + 1 else if ch$ = "*" and m = len(mask$) - 1 then while x < len(path$) r$ = r$ + mid$(path$, x + 1, 1) x = x + 1 wend else if ch$ = "*" then if z$ = "." then for i = len(path$) - 1 to 0 step -1 if mid$(path$, i + 1, 1) = "." then exit for next if i < 0 then r$ = r$ + mid$(path$, x + 1) + "." i = len(path$) else r$ = r$ + mid$(path$, x + 1, i - x + 1) end if x = i + 1 m = m + 1 else if z$ = "?" then r$ = r$ + mid$(path$, x + 1, len(path$)) m = m + 1 x = len(path$) else for i = len(path$) - 1 to 0 step -1 'if mid$(path$, i + 1, 1) = z$ then exit for if ucase$(mid$(path$, i + 1, 1)) = ucase$(z$) then exit for next if i < 0 then r$ = r$ + mid$(path$, x + 1, len(path$)) + z$ x = len(path$) m = m + 1 else r$ = r$ + mid$(path$, x + 1, i - x) x = i + 1 end if end if end if else if ch$ = "." then do while x < len(path$) if mid$(path$, x + 1, 1) = "." then x = x + 1 exit do end if x = x + 1 loop r$ = r$ + "." end if end if end if end if end if next do while right$(r$, 1) = "." r$ = left$(r$, len(r$) - 1) loop r$ = rtrim$(r$) masknewname$ = r$ end function