QA@IT

バッチのfor文内でワイルドカード(*)を使用するとif文ではダブルクォートが消えてしまう

13855 PV

バッチのfor文内でワイルドカード(*)を使用するとif文ではダブルクォートが消えてしまう

バッチファイル→for文内でワイルドカード(*)を使用すると実行時にダブルクォートが消えてしまう

バッチでワイルドード指定をするとif文で代入されたときに""が消えてしまいます。

まずこのバッチはフォルダやファイルを削除するバッチなのです。
機能としてファイル/フォルダ名を指定し削除対象外とするバッチです。

その中に「ショートカット」を除外するようにワイルドカードを使用し以下のように指定しました

"*.lnk"

ただ、この場合 ifで代入されると""が抜けてしまいます。

●以下のように代入させたい

"TARGET.lnk"

●現状は以下

TARGET.lnk

---バッチを一部抜粋----

for %%f in ( * ) do call :sub "%%f"
for /D %%f in ( * ) do call :sub "%%f" d
exit /b

:sub
set flag=OFF
for %%e in ( "hoge" "aaa bbb" "*.lnk" ) do if %1==%%e set flag=ON
if "%flag%"=="ON" goto :EOF

if "%2"=="" move %1 %AFT%
if "%2"=="d" move %1 %AFT%
---バッチを一部抜粋----

----実行結果一部抜粋----

D:\test\Bfr>for %e in ("hoge" "aaa bbb" ""*.lnk"") do if "ppp.txt.lnk" == %e set flag=ON

D:\test\Bfr>if "ppp.txt.lnk" == "hoge" set flag=ON

D:\test\Bfr>if "ppp.txt.lnk" == "aaa bbb" set flag=ON

D:\test\Bfr>if "ppp.txt.lnk" == ppp.txt.lnk set flag=ON ←ここの比較式の右側を"ppp.txt.lnk"と代入したい

D:\test\Bfr>if "OFF" == "ON" goto :EOF

D:\test\Bfr>if "" == "" move "ppp.txt.lnk" \test\Aft

D:\test\Bfr>if "" == "d" move "ppp.txt.lnk" \test\Aft

----実行結果一部抜粋----

反対の考えでそもそものif文の""を外せばとも思い試みましたが
バッチ自体が上手く動かなくなってしまったので、この方式はやめました。

良いアドバイスや解決方法をご教授お願い致します

回答

お返事したつもりが、未返答でした、、、
お返事遅れましたが、ご回答誠にありがとうございました

参考にさせていただきました
大変感謝いたします

編集 履歴 (0)

%%e%%~e にしてみたらどうでしょうか?

for %%e in ( "hoge" "aaa bbb" "*.lnk" ) do if %1=="%%~e" set flag=ON
編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。