2014-09-18 115 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