我尝试编写批处理脚本,该脚本将通过计算机列表,从计算机读取文件,分隔文件名,然后回显计算机名称和文件名结果。我遇到的问题是让计算机名称变量填充在嵌套的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
)
)
答案 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"看看如何实现这一目标。