1

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

@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 个文件执行操作?

4

1 回答 1

1

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

  • “delims=|” 您使用的选项在您的情况下没有做任何事情
  • when/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. 从您的问题(和示例代码)来看,您的情况是否真的有必要还不是很清楚。您可能需要澄清这一点,以便可以改进上述代码。

于 2012-09-12T05:16:31.120 回答