使用批处理文件将文件名附加到上次修改的日期和时间

时间:2018-11-23 17:05:40

标签: batch-file batch-rename datemodified

我正在尝试将所有removedfile: function(file) { $('#RemoveFileModal').modal('toggle').on('click', '#outAceptar', function(e) { //myDropzone.removeFile(file); return true; }); $('#RemoveFileModal').modal('toggle').on('click', '#outCancelar', function(e) { return false; }); }, 文件从一个文件夹复制到另一个文件夹,但是在复制时,我需要将文件的修改日期和时间添加到文件名中。例如,如果文件名是*.csv,并且在Test.csv上进行了修改,则11/21/2018的输出应该是15:01:10。我找到了向其添加当前时间戳的脚本,但是我需要添加文件的修改日期。您可以在下面看到它:

Test11-21-201815_01-10.csv

预先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果未加载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"表示对/C选项(/M)中指定的文件运行命令(file.ext)。 "cmd /C echo @fdate @ftime"表示打开一个新的cmd并执行string指定的命令,然后终止。 @fdate是文件的最后修改日期,@ftime是文件的最后修改时间。

我们分别为line1line2设置变量@fdate@ftime,然后对它们进行一些格式更改。

最后,我们将file.ext重命名为fileDD-MM-YYYYHH-MM-SS.ext

有关更多信息,请在新的cmd中键入for /? & forfiles /?

希望这对您有所帮助,因为它更快。