Войти

Показать полную графическую версию : IF EXIST "path/*.ext" работает как IF EXIST "path/*.ext*"


lz57005
26-09-2019, 12:02
Пример

if exist "*.xls" echo OK

сработает на файле *.xlsx, да и в принципе будет работать как *.xls*, хоть *.xlsxxx ему подкинь

Вопрос как этого избежать? если нужно строгое соответствие расширению файла.

lz57005
26-09-2019, 14:27
отбой, заменил подсчетом в цикле совпадений по расширению.

megaloman
26-09-2019, 15:57
@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "Ext=xls"
FOR %%f IN ("%BoxIn%\*.%Ext%") DO If /I "%%~xf"==".%Ext%" Echo %%f
pause
Exit /B

Iska
26-09-2019, 17:25
IF EXIST "path/*.ext" работает как IF EXIST "path/*.ext*" »
Если у Вас включена поддержка создания коротких имён (8.3 filename - Wikipedia (https://en.wikipedia.org/wiki/8.3_filename)) для длинных имён:
fsutil.exe 8dot3name query
— то для каждого Вашего .xlsx будет создано короткое имя с расширением xls, для каждого Вашего .xlsxxx будет создано короткое имя с расширением xls:
https://i.imgur.com/4AwnY7C.png
а функции WinAPI FindFirstFile/FindNextFile работают с обеими именами — и с длинными, и с короткими, посему будут найдены и все .xlsx, и все .xlsxxx.

Так что у Вас как раз и наблюдается самое что ни на есть:
строгое соответствие расширению файла. »




© OSzone.net 2001-2012