批处理文件循环遍历子文件夹并使用子文件夹名称作为变量

3

这是我的第一篇帖子,因为我在编写一个批处理文件时遇到了一些麻烦,需要循环遍历子文件夹,并将子文件夹名称用作命令中的变量。我已经成功地完成了代码,并且它可以运行,但是它会不断重复使用主目录中最后一个文件夹名称。它无法找到并循环遍历其他子文件夹。

SETLOCAL EnableDelayedExpansion

SET MYPATH=H:\RAWBDA\001076\host

for /d %%a in (%mypath%\*) do set "folderName=%%a"
echo %folderName%

for /d %%f in (%folderName%) do set myfolder=%%~nxf
echo %myfolder%

FOR /d /r %%i IN ('DIR /B %mypath%*.tif') DO (

trial.exe "%foldername%\%myfolder%_B4.tif" "%foldername%\%myfolder%_B3.tif" "%foldername%\%myfolder%_B2.tif" "%foldername%\%myfolder%_B432.tif"

)

我认为问题在于FolderName和myFolder在循环外部,但我无法使它们在循环内动态更新。

非常感谢您的帮助。


子文件夹的字符长度都相同LT50010762006058COA00主目录(H:\ RAWBDA \ 001076 \ host)通常有10-50个试用程序的期望命令行对于第一个子文件夹如下所示:trial.exe "H:\RAWBDA\001076\host\LT50010762006058COA00\LT50010762006058COA00_B4.tif" "H:\RAWBDA\001076\host\LT50010762006058COA00\LT50010762006058COA00_B3.tif" "H:\RAWBDA\001076\host\LT50010762006058COA00\LT50010762006058COA00_B2.tif" "H:\RAWBDA\001076\host\LT50010762006058COA00\LT50010762006058COA00_B432.tif" - burt46
每个子文件夹中大约有10个.tif文件。然而,如果您注意到我的代码,我手动选择顺序(_B4、_B3、B2和_B432),这样“trial”就可以使用正确的.tif运行。 - burt46
它不让我编辑原始项目。我认为这是因为这是我的第一个帖子。使用 %%i 是个好主意。我的批处理技能很初级,我从其他脚本中复制东西。有什么想法如何在嵌套循环中修复这个问题? - burt46
"H:\RAWBDA\001076\host\LT50010762006058COA00\LT50010762006058COA00_B4.tif" "H:\RAWBDA\001076\host\LT50010762006058COA00\LT50010762006058COA00_B3.tif" "H:\RAWBDA\001076\host\LT50010762006058COA00\LT50010762006058COA00_B2.tif".tif文件的名称是文件夹名称加上_BX,其中X的取值范围为1到9。 - burt46
好的,我有这个文件夹H:\RAWBDA\001076\host\在这个文件夹中有子文件夹,每个子文件夹都有一个唯一的代码。例如,第一个文件夹是LT50010762006058COA00。每个文件夹中都有.tif文件,全部命名为“subfoldername_BX.tif”,其中X从1到9不等。要运行试用命令,只需循环遍历每个子文件夹并选择图像B4、B3和B2。最后一行B432是一个文件,用于合并这三个.tif文件。这是试用的输出。 - burt46
1个回答

7
解决方案很简单:枚举子文件夹并使用前缀%%~nx获取它们的名称。
SET "MYPATH=H:\RAWBDA\001076\host"
rem Using quotes around "var=value" in case the path may contain spaces

for /d %%a in ("%mypath%\*") do (
    echo Folder name: %%~nxa, full folder path: %%a
    trial.exe "%%a\%%~nxa_B4.tif" "%%a\%%~nxa_B3.tif" "%%a\%%~nxa_B2.tif" "%%a\%%~nxa_B432.tif"
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接