我想创建一个批处理文件,读取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个文件执行操作?
答案 0 :(得分:1)
我不太确定我的问题是否正确,因为您的原始代码包含一些当时没有意义的东西(或者至少不是必需的): - )
/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.tif
到file10.tif
。根据您的问题(和示例代码),在您的情况下,这是否真的是必要的并不十分清楚。您可能想澄清这一点,以便可以改进上述代码。