使用Windows命令提示符根据扩展名和日期搜索文件

时间:2014-09-18 16:17:10

标签: windows batch-file cmd

我试图通过我的文件搜索查找HTML和最新修改日期,我尝试输出的格式是:

文件和文件名的路径,上次修改的日期 - 按字母顺序排序。 (X:\mydirectory\myfile.html, 18-09-2014 18:15

我使用了以下字符串但由于某种原因我无法获得文件的最后修改日期,即使我移动了属性,我也不明白我失败的地方。

dir X:\*.html /s /o:n /t:w /b /a:-d   >> "X:\list-all-html-files.txt"  

感谢任何帮助

2 个答案:

答案 0 :(得分:2)

请使用以下命令获取今天前一天修改的文件。

Z:> FORFILES / s / M * .html / C" cmd / c echo @path在@fdate @ ftime" / D -1>> C:\ PerlCompiler \一览全HTML的新999.txt

如需更多参考,请浏览http://ss64.com/nt/forfiles.html

链接

FORFILES.exe(Vista / Windows7 / 2008中的本机命令,通过Resource Kit for XP)

- Vinay Mishra

答案 1 :(得分:0)

/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中。