的/b
输出只是路径的普通文件名,所以没有最新的信息存在。另外你的语法有点奇怪(例如不需要冒号),尽管它会起作用。同时让我们一次一个脚印。
我的做法得到公正的文件名(第一个测试步骤)将是:
dir x:\*.html /s | find ".html" | sort > X:\list-all-html-files.txt
你不需要围绕在这种情况下,输出文件名引号,因为没有空间;否则这很好,一个好主意。最后修改日期是DIR输出中默认提供的日期,因此您无需指定/tw
。您将要对输出进行排序,因为它将扫描各种目录,而不仅仅是确保每个目录中的名称都按/on
排序。假设你并不是真的追加到另一个文件,那么你需要使用>
而不是>>
,这样每次运行都会重新开始,或者在开始之前使用下面的代码删除输出。你也不需要/a-d
(我不认为),因为你指定的扩展名为.html
,除非你认为你可能有一个不太可能的目录名,其扩展名为.html
。
但是你说你确实需要完整的路径和细节,所以你需要使用FOR循环并提取名称,然后逐个获取其余的信息。假设它在批处理文件中(这就是为什么我使用%%而不是%I)。该%%~ti
提供时间戳和%%〜dpnxI产生级联的驱动器+路径+文件名+扩展名:
@echo off
setlocal
set OUTFILE=list-all-html-files.txt
if exist %OUTFILE% del %OUTFILE%
for /f "tokens=*" %%I in ('dir x:\*.html /s /b ^| sort') do echo %%~dpnxI %%~tI >> %OUTFILE%
endlocal
我用了一个局部变量OUTFILE,因此它可以被定义一次,但在代码的几个地方使用。在%%~dpnxI
和%%~tI
之间有一个TAB字符,可以将输出内容粘贴到Excel中。
你实际上是否使用MS-DOS(如果是这样,哪个版本)?请注意,Windows命令提示符是**不是**“MS-DOS”或“DOS”。 – 2014-09-18 16:36:29
嗨,你是正确的,它是Windows提示命令版本5.2.3790,我很抱歉的错误,并感谢您纠正我。 – Kristian 2014-09-19 12:09:45