对于/ f仅从forfiles / s输出顶级

时间:2016-01-18 16:33:39

标签: windows batch-file cmd

我有以下目录结构结构:

DirA
    DirB
     fileb1
     fileb2
    DirC
     filec1
     filec2
fileA1
my.appcache
fileA2

我正在尝试编写一个批处理文件,将文件名及其相关目录输出到.appcache或.txt文件。

以下是DirA上面的目录中的脚本

cd DirA

del /Q "my.appcache"

fsutil file createnew my.appcache 0

setlocal disableDelayedExpansion



for /f "delims=" %%A in ('forfiles /s /m *.* /c "cmd /c echo @relpath >> my.appcache" ') do (
  set "file=%%~A"
  setlocal enableDelayedExpansion
  echo !file:~2!
  endlocal
)

PAUSE

但是,脚本只将DirA的内容发送到my.appcache。但是,如果我让它回显到cmd窗口,它会列出DirB和DirC中的所有文件。

任何人都可以看到我做错了吗?

编辑:它在DIRB和DIRC中创建my.appcaches并输出相关部分。

1 个答案:

答案 0 :(得分:2)

您的脚本有点难以理解,因为您要将for /fforfiles合并。这两个命令执行类似的工作,因此人们通常使用其中一个。无论如何,您的问题是您要附加到当前目录中的文件,该文件随着forfiles命令遍历树而更改。你会在每个目录中找到一个单独的my.appcache文件。您应该在一个地方进行重定向:

(forfiles /s /m *.* /c "cmd /c echo @relpath") > my.appcache

(你不需要任何其他脚手架。)

顺便说一下,如果你想搜索所有文件(不只是那些名字中包含点的文件),那么/m *选项是默认选项,所以你可以把它留下来:

(forfiles /s /c "cmd /c echo @relpath") > my.appcache