2014-09-18 114 views
0

我试图贯穿我的文件搜索寻找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" 

任何帮助表示赞赏

+1

你实际上是否使用MS-DOS(如果是这样,哪个版本)?请注意,Windows命令提示符是**不是**“MS-DOS”或“DOS”。 – 2014-09-18 16:36:29

+0

嗨,你是正确的,它是Windows提示命令版本5.2.3790,我很抱歉的错误,并感谢您纠正我。 – Kristian 2014-09-19 12:09:45

回答

2

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

Z:> FORFILES/s/M * .html/C“cmd/c echo @path在@fdate @ftime”/ D -1 >> C >> \ PerlCompiler \ list-all-html-new -999.txt

更多的参考请到通过链接http://ss64.com/nt/forfiles.html

FORFILES.exe(在Vista/Windows7的/ 2008本机命令,通过资源工具包的XP)

- 维奈·米什拉

+0

感觉老...我不知道这已被合并为原生。 +1为简单的解决方案(显然它默认为字母排序)。 – Torqane 2014-09-20 17:15:50

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

+0

嗨我尝试了建议的方法,但它没有工作出于某种原因,最有可能的,因为我没有真正的Windows提示命令和批处理文件的经验,我感谢您提供的帮助 – Kristian 2014-09-19 12:07:14

+0

这很好 - 你咬了一口对于一个初学者来说相当大的块!你有错误吗?我测试了上面的内容,当然还有不同的路径和文件名,所以尽管我认为它应该可行,但我可能会摸索一些东西。让我们知道什么似乎出了问题,也许会有什么会跳出来对我们。 – Torqane 2014-09-20 16:44:13