我有以下目录结构结构:
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并输出相关部分。
答案 0 :(得分:2)
您的脚本有点难以理解,因为您要将for /f
与forfiles
合并。这两个命令执行类似的工作,因此人们通常使用其中一个。无论如何,您的问题是您要附加到当前目录中的文件,该文件随着forfiles
命令遍历树而更改。你会在每个目录中找到一个单独的my.appcache文件。您应该在一个地方进行重定向:
(forfiles /s /m *.* /c "cmd /c echo @relpath") > my.appcache
(你不需要任何其他脚手架。)
顺便说一下,如果你想搜索所有文件(不只是那些名字中包含点的文件),那么/m *
选项是默认选项,所以你可以把它留下来:
(forfiles /s /c "cmd /c echo @relpath") > my.appcache