批处理文件:for循环中的变量

时间:2018-08-15 09:21:08

标签: batch-file

我对cmd脚本很陌生,我遇到了一个问题。 我想遍历当前文件夹中的所有文件及其所有具有某些结尾的子文件夹,这些结尾存储在数组%list%中。所以我开始:

@for /R %%d in (.) do @( 
    cd %%d
    @(for %%a in (%list%) do @( 
       for %%f in (*.%%a) do @echo %%d/%%f
    ))          

)

这有效,但是它会生成类似C:\ test \。\ myfile.txt的路径 所以我想获得目录的子字符串。由于这不适用于%% d之类的变量,因此我尝试将%% d存储在单独的变量中:

@for /R %%d in (.) do @( 
    cd %%d
    set dir=%%d
    @(for %%a in (%list%) do @( 
       for %%f in (*.%%a) do @echo %dir%/%%f
    ))          

)

但这给了我与@echo /%%f相同的输出 我在做什么错了?

1 个答案:

答案 0 :(得分:0)

首先,我不明白为什么您坚持要使每个命令都静音,而只用一个@echo off

绝对不需要每次迭代都更改当前目录,您可以从自己所在的位置执行任务。

您可以通过将\.修饰符应用于FOR /R来消除~f变量中的尾随%%d,因此使用%%~fd路径C:\test\.成为C:\test

@echo off
for /R %%d in (.) do for %%e in (%list%) do (
    for %%f in ("%%~fd\*.%%e") do echo %%f
)