Batch file 读取文件名和

Batch file 读取文件名和,batch-file,cmd,Batch File,Cmd,我想创建一个批处理文件,读取特定目录中的前10个文件名,然后将路径设置为10个不同的变量。举一个简单的例子,路径是c:\test,其中有许多名为file1.tif、file2.tif等文件。我想将变量filepath1设置为第一个文件的路径,即前10个文件的路径是c:\test\file1.tif,依此类推。代码如下: @echo off cd C:\TEST setlocal ENABLEDELAYEDEXPANSION FOR /f "delims=|" %%a IN ('dir /b')

我想创建一个批处理文件,读取特定目录中的前10个文件名,然后将路径设置为10个不同的变量。举一个简单的例子,路径是c:\test,其中有许多名为file1.tif、file2.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
并设置
文件路径!x。如果我更改了与
有关的任何内容!x,它打破了循环。如何正确设置变量并将循环限制为仅对10个文件执行操作?

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

  • 您使用的“delims=|”选项在您的案例中没有任何作用
  • /a
    选项用于算术时(请参见
    帮助设置
    ),当与
    设置文件路径一起使用时,该选项是错误的!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
。从您的问题(和示例代码)来看,不太清楚这在您的案例中是否真的有必要。您可能希望澄清这一点,以便对上述代码进行改进。

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

  • 您使用的“delims=|”选项在您的案例中没有任何作用
  • /a
    选项用于算术时(请参见
    帮助设置
    ),当与
    设置文件路径一起使用时,该选项是错误的!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
。从您的问题(和示例代码)来看,不太清楚这在您的案例中是否真的有必要。您可能希望澄清这一点,以便改进上述代码