检查具有长文件名的文件扩展名

时间:2014-04-06 14:09:20

标签: batch-file cmd iso

我检查文件的扩展名(.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

2 个答案:

答案 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.isof2.ISO的文件。
  • 比较数字是否相等,EQU优于==
  • 即使set /a未生效,在for循环内使用setlocal enabledelayedexpansion仍可正常工作。