0

我正在尝试将所有*.csv文​​件从一个文件夹复制到另一个文件夹,但是在复制时我需要将文件的修改日期和时间添加到文件名。例如,如果文件名是Test.csv并且它在输出上被修改11/21/2018 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")

在此先感谢您的帮助。

4

2 回答 2

1

这里有一些关于附加日期的示例,
但我会使用 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最后的。

于 2018-11-23T18:59:09.980 回答
1

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

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

最后,我们重命名file.extfileDD-MM-YYYYHH-MM-SS.ext.

有关更多信息,请输入for /? & forfiles /?新的 cmd。

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

于 2018-11-24T11:29:01.063 回答