我有一个DOS批处理文件,它将创建一个报告,列出文件夹树中包含的文件。 下面的代码为超过 115,000 个文件生成所需的输出。但是,生成了 13 条具有空白日期/时间和文件大小的记录。当我手动执行 DIR 命令(不带/b 选项)时,会显示所需的文件信息。是否可以在不添加大量解决方法代码的情况下更正此问题?
FOR /f "tokens=*" %%A IN ('DIR "<Path>" /a:-d /b /s') DO (
ECHO %%~tA %%~zA %%~dpA %%~nA %%~xA >> test.txt
)
(FOR /f "tokens=*" %%A IN ('DIR "<Path>" /a:-d /b /s') DO (
if exists "%%~A" ECHO %%~tA %%~zA %%~dpA %%~nA %%~xA
)) >> test.txt
未获取日期/文件大小的主要原因是找不到该文件。
您的代码如何工作?
for /f
启动运行 dir
命令的单独 cmd
实例。
当所有数据都已检索并加载到内存中(即cmd
/dir
命令完成)后,for
将开始遍历检索到的行。信息检索和信息处理之间已经过去了一段时间。
在这段时间里,"也许"有问题的文件已被移动/删除/重命名,无法访问它们来检索其属性。因此,首先检查该文件是否仍然存在
附加括号和重定向更改是为了避免必须为每个echo
操作打开目标文件。这样,文件在 for
命令的开头打开,在结束时关闭。