簡體   English   中英

使用批處理文件將文件名附加到上次修改的日期和時間

[英]Append to a filename last modified date and time with a batch file

我正在嘗試將所有*.csv文件從一個文件夾復制到另一個文件夾,但是在復制時,我需要將文件的修改日期和時間添加到文件名中。 例如,如果文件名是Test.csv並且已在11/21/2018 15:01:10上進行了修改, 15:01:10輸出應為Test11-21-201815_01-10.csv 我找到了向其添加當前時間戳的腳本,但是我需要添加文件的修改日期。 您可以在下面看到它:

@echo off
set Source=C:\csvtest
set Target=C:\csvtest\csvtest\Archive
FOR /f "tokens=1-8 delims=/.:- " %%A in ("%date%%time%") DO (
SET Month=%%B
SET Day=%%C
SET Year=%%D
SET Hours=%%E
SET Minutes=%%F
SET Seconds=%%G
SET All=%%B-%%C-%%D_%%E-%%F-%%G
)

FOR %%i IN ("%Source%\*.csv") DO (
COPY "%%i" "%Target%\%%~Ni %All%.csv")

在此先感謝您的幫助。

在SO上有一些附加日期的示例,
但是我將使用PowerShell作為完成此任務的工具(分批包裝)。

:: Q:\Test\2018\11\23\SO_53450598.cmd
@echo off
set "Source=C:\test"
set "Target=C:\test\Archive"
PowerShell -Nop -C "Get-ChildItem '%Source%\*.csv'|Copy-Item -Destination {'%Target%\{0} {1:MM-dd-yyyy_HH-mm-ss}.csv' -f $_.BaseName,$_.LastWriteTime} -WhatIf"

如果輸出看起來正常,請最后刪除-WhatIf

如果未加載PowerShell,@ LotPings方式將持續大量時間。

因此,我將在需要delayedexpansion批處理文件中提供一種更快,更易理解的方法:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-2" %%a IN ('forfiles /M file.ext /C "cmd /C echo @fdate @ftime"') do (
 set line1=%%a
 set line2=%%b
 set line1r=!line1:/=-!
 set line2r=!line2::=-!
 rename "file.ext" "file!line1r!!line2r!.ext"
)
rem NOTE: Date format is DD-MM-YYYY. Time format is HH-MM-SS.

讓我們分解一下:

for /f ...對於我來說,眾所周知。

命令forfiles /M file.ext /C "cmd /C echo @fdate @ftime"表示對/M選項( file.ext )中指定的文件運行命令( /C )。 "cmd /C echo @fdate @ftime"表示打開新的cmd並執行字符串指定的命令,然后終止。 @fdate是文件的最后修改日期,而@ftime是文件的最后修改時間。

我們為@fdate@ftime分別設置變量line1line2 ,然后對其進行一些格式更改。

最后,我們將file.ext重命名為fileDD-MM-YYYYHH-MM-SS.ext

有關更多信息,請輸入for /? & forfiles /? for /? & forfiles /? 在一個新鮮的cmd中。

希望這對您有所幫助,因為它更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM