的/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