嵌套FOR变量

时间:2016-07-19 18:23:09

标签: batch-file for-loop

我尝试编写批处理脚本,该脚本将通过计算机列表,从计算机读取文件,分隔文件名,然后回显计算机名称和文件名结果。我遇到的问题是让计算机名称变量填充在嵌套的FOR / R命令中。这是我的剧本:

@ECHO OFF
SetLocal EnableDelayedExpansion
SET LIST=Computers.txt
FOR /F %%A IN (%LIST%) DO (
    FOR /R \\%%A\c$\folder1\folder2 %%B IN (*.txt) DO (
        FOR /F "tokens=2 delims=." %%C IN ("%%B") DO (ECHO %%A %%C
        )
    )
)
EndLocal

文件名类似于RB-C1SRC20160716CL.P17.txt。所以我要找的结果是

MyPCName P17

但我得到一个空白的结果。我发现%%一个var正在从文本文件中填充,但FOR / R中的%% A var没有填充。如果我在FOR命令上ECHO我看到FOR / R \%a \ folder1 \ folder2而不是FOR / R \ MyPCName \ folder1 \ folder2。这种细分使得脚本的其余部分无法正常工作。

更新:

感谢aschipfl指出我正确的方向。我终于能够让脚本工作了。这是工作版本:

@ECHO OFF
SetLocal EnableDelayedExpansion
SET LIST=Computers.txt
FOR /F %%A IN (%LIST%) DO (
    SET WKSTN=%%A
    CALL :SUB
)
EndLocal
GOTO :EOF

:SUB
FOR /R \\%WKSTN%\c$\folder1\folder2 %%B IN (*.txt) DO (
        FOR /F "tokens=2 delims=." %%C IN ("%%B") DO (ECHO %%A %%C
    )
)

1 个答案:

答案 0 :(得分:2)

遗憾的是,time_to_sell命令的根目录不能由另一个for /R变量(如for)提供,也不能使用延迟扩展(%%I)给出。您需要通过正常扩展的变量(!VAR!)或参数引用(%VAR%%1,...)进行迭代指定。

一个好的解决方法是将%2循环放在子例程中,并使用for /R从主例程中调用它。需要将(变量持有)根路径作为参数传递给call。在子例程中,它由参数引用引用(如call)。

查看帖子的this answer" Get size of the sub folders only using batch command"看看如何实现这一目标。