0

我有一个 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
)
4

1 回答 1

1
(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启动一个单独的实例cmd来运行该dir命令。

当所有数据都被检索并加载到内存中(即cmd/dir命令完成)时,for将开始遍历检索到的行。在信息检索和信息处理之间已经过去了一段时间。

此时,“可能”有问题的文件已被移动/删除/重命名,无法访问它们以检索其属性。所以,首先检查文件是否仍然存在

附加括号和重定向更改是为了避免每次echo操作都必须打开目标文件。这样,文件在for命令开始时打开并在结束时关闭。

于 2015-01-29T10:48:14.820 回答