我检查文件的扩展名(.iso或.img):
set extension=%~x1
set typefile=0
FOR %%a IN (.iso .img) DO (
if %%a==%extension% set /a typefile=!typefile!+1
)
if %typefile%==0 (
GOTO NOMOUNT
) else (
GOTO MOUNT
)
它的工作原理,但问题是当文件有这样的文件名时,例如:
9600.16384.130821-1623_x64fre_Client_IT-IT-IRM_CCSA_DV5.ISO
在这种情况下,如果文件是iso,%typefile%
也是set=0
。
答案 0 :(得分:2)
将if %%a
更改为if /i %%a
,这会使字符串匹配不区分大小写。
BTW,set /a typefile=!typefile!+1
可以很容易set /a typefile+=1
答案 1 :(得分:0)
您的直接问题与长文件名无关,但在比较字符串时区分大小写 - 请参阅@Magoo的答案。
然而,总的来说,你想要实现的目标并不完全清楚;例如,您的for
循环枚举字符串文字 - .iso
和.img
- 而不是尝试匹配当前文件夹中的文件名使用模式 *.iso
和*.img
。
以下解决方案假设您要计算当前文件夹中所有文件的文件扩展名不区分大小写与第一个参数传入的扩展名相匹配(包括初始.
) :
REM The extension to match; specify _with_ initial `.`, e.g. `.iso`
REM `~x` ensures that if a whole filename was specified, only the extension
REM is extracted.
set extension=%~x1
set typefile=0
FOR %%a IN (*%extension%) DO (
set /a typefile+=1
)
if %typefile% EQU 0 (
GOTO NOMOUNT
) else (
GOTO MOUNT
)
注意:
*.iso
之类的通配符模式始终执行大小写不敏感匹配;例如,*.iso
将匹配名为f1.iso
和f2.ISO
的文件。EQU
优于==
。set /a
未生效,在for
循环内使用setlocal enabledelayedexpansion
仍可正常工作。