读取文件名和

时间:2012-09-11 19:04:48

标签: batch-file cmd

我想创建一个批处理文件,读取spefic目录中的前10个文件名,然后将路径设置为10个不同的变量。举个简单的例子,路径是 c:\ test ,里面会有很多名为 file1.tif file2.tif的文件等等我想将变量filepath1设置为等于第一个文件的路径,即 c:\ test \ file1.tif ,依此类推前10个文件。这是代码:

@echo off
cd C:\TEST
setlocal ENABLEDELAYEDEXPANSION
FOR /f "delims=|" %%a IN ('dir /b') DO (
    CALL SET /a x = !x! +1
    if !x! == 1 (
        CALL SET /a filepath!x!="C:\TEST\%%a"
    )
)
echo %filepath1%
echo %filepath2%
pause
goto EOF

当我运行该程序时,似乎执行FOR循环正常,但对于filepath1它只显示0并且它不显示filepath2的任何内容。我相信问题出在if !X! == 1并设置filepath!x!。如果我改变与!x!有关的任何内容,它会打破循环。如何正确设置变量并限制循环仅对10个文件执行操作?

1 个答案:

答案 0 :(得分:1)

我不太确定我的问题是否正确,因为您的原始代码包含一些当时没有意义的东西(或者至少不是必需的): - )

  • “delims = |”您使用的选项在您的情况下没有做任何事情
  • /a选项用于算术时(请参阅help set),与set filepath!x!...行一起使用时出错。

无论如何,以下内容应该有效:

setlocal ENABLEDELAYEDEXPANSION
cd C:\Test
FOR /f %%a IN ('dir /b') DO (
    SET /a x = !x! +1
    SET filepath!x!="C:\TEST\%%a"

    if !x! equ 10 goto done
)
:done
rem filepath1 to filepath10 are defined now, given there were up to 10 matching
rem files in the first place.

echo %filepath1%
echo %filepath2%

pause

上面的代码没有进行任何错误检查,也没有验证有问题的文件实际上是file1.tiffile10.tif。根据您的问题(和示例代码),在您的情况下,这是否真的是必要的并不十分清楚。您可能想澄清这一点,以便可以改进上述代码。