Batch-File

使用 Windows CMD 或簡單的 .TXT 重命名文件以將修改日期添加到文件名

  • June 10, 2020

我正在嘗試重命名大量文件,以將文件資源管理器中“修改日期”列中的日期合併到 YYYYMMDD 格式的每個文件名中。我能夠使用以下步驟從內部所有文件的所需文件夾生成報告:

  1. 點擊提示和技巧文件夾
  2. 按住 Shift 鍵並右鍵點擊“提示和技巧”文件夾
  3. 點擊“在此處打開命令視窗”
  4. 類型dir>filename.txt
  5. 點擊進入
  6. 打開 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

引用自:https://serverfault.com/questions/776666