使用 Windows CMD 或簡單的 .TXT 重命名文件以將修改日期添加到文件名
我正在嘗試重命名大量文件,以將文件資源管理器中“修改日期”列中的日期合併到 YYYYMMDD 格式的每個文件名中。我能夠使用以下步驟從內部所有文件的所需文件夾生成報告:
- 點擊提示和技巧文件夾
- 按住 Shift 鍵並右鍵點擊“提示和技巧”文件夾
- 點擊“在此處打開命令視窗”
- 類型
dir>filename.txt
- 點擊進入
- 打開 Tips and Tricks 文件夾並查找具有您創建的文件名的文本文件
然後,我將報告作為分隔文本文件拉入 Excel 並處理了內容,因此我現在在一個列中有“最後修改”日期,在另一列中有文件名:
修改日期| 文件名
2009 年 1 月 9 日 | ArcGIS_TT_Projections_Transformations.doc
2014 年 2 月 18 日 | ArcGIS_TT_Re-Projection_WMAS.docx
2009 年 1 月 9 日 | ArcGIS_TT_Set_Selectable_Layers.doc
2009 年 1 月 9 日 | ArcGIS_TT_Spatial_Join.doc
2010 年 4 月 21 日 | ArcGIS_TT_View_CLU_History_Layer.doc
我只使用如下重命名腳本取得了成功:
@echo off setlocal enableDelayedExpansion for %%F in ("ArcGIS_TT_Projections_Transformations*.txt") do ( set "name=%%F" ren "!name!" "!name:ArcGIS_TT_Projections_Transformations=ArcGIS_TT_Projections_Transformations_20090109!" ) pause
但我試圖避免對 61 個文件重複該過程。有沒有人建議我可以使用 Windows CMD 提示符或簡單的 .txt 來更自動地將日期修改資訊拉入文件名?
謝謝你的幫助!
這是您需要使用的程式碼來迭代文本文件,獲取每個文件的修改日期,使用修改日期作為文件名的一部分複制每個文件,並刪除原始文件。你非常接近,但你錯過了一些東西。
要獲取文件的修改日期,我們可以使用
set "MDate=%%~tF"
.要解析由您提供的日期,
set "MDate=%%~tF"
您需要指定要在輸出中使用的由 %MDate% 儲存的值的哪些部分。您可以使用該命令set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!"
將set "MDate=%%~tF"
MM/DD/YYYY hh:mm 的輸出轉換為 YYYYMMDD。之後,我們可以使用文件名中的 %ParsedDate% 的值將文件複製到新文件。
您應該看到文件的兩個副本。如果要刪除原始文件,我們只需要執行命令即可
for %%F in ("C:\test\*.txt") do ( del %%F )
。這將為您留下重命名的文本文件。要將 .txt.new 轉換為 .txt,請使用命令ren "C:\test\*.new" *.
。因為我們在一個 for 循環中,所以我們需要改變我們處理變數的方式(這基於你到目前為止所寫的內容,你已經知道了)。我們將 % 更改為 ! 用於循環內的變數名。因此,如果您有變數名
example
,您將!example!
在循環內引用該變數,而不是%example%
.為了使循環內的變數起作用,我們還需要
setlocal enabledelayedexpansion
在循環之前添加命令。那應該涵蓋所有內容。如果這解決了您的問題,請隨時投票或將答案標記為正確。
下面提供了完整的批處理文件。
setlocal enabledelayedexpansion for %%F in ("C:\test\*.txt") do ( set "MDate=%%~tF" set "ParsedDate=!MDate:~6,4!!MDate:~0,2!!MDate:~3,2!" REM To add time set "ParsedDate=!MDate:~6,4!!MDate:~3,2!!MDate:~0,2!!MDate:~11,2!!MDate:~14,2!" copy %%F %%~dpnF_!ParsedDate!%%~xF.new ) for %%F in ("C:\test\*.txt") do ( del %%F ) ren "C:\test\*.new" *. exit