将日期添加到复制的文件

时间:2013-02-15 08:28:01

标签: batch-file batch-processing batch-rename

我正在尝试将复制文件的日期从一个目录添加到另一个目录。这就是它应该是什么样子

原始文件名:XEsalary.csv

结果文件名:XEsalary-2013-02-15.csv

这是我的代码:

set REMOTE=U:\ 
set LOG=C:\Integration\FE\log_test 
set PVM=%DATE:~9,4%-%DATE:~6,2%-%DATE:~3,2%
set YY=%DATE:~9,4% 
set LOCAL=C:\FTP\VC\test
cd %LOCAL%

xcopy /y /f /v "%LOCAL%\*.csv" "%REMOTE%\" >>%LOG%\%PVM%.log 
xcopy /y /f /v "%LOCAL%\*.csv" "%LOCAL%\archive\*.csv"  
:: assist with turning this into a for loop
ren %LOCAL%\archive\*.csv %LOCAL%\archive\*%PVM%.csv 
echo. >>%LOG%\%PVM%.log

复制只是文件。它是重命名部分,不起作用。有什么帮助吗?

提前Thx: - )

2 个答案:

答案 0 :(得分:2)

Windows不允许您使用通配符重命名。您必须在for循环中命名每个文件。当您复制时,也可以重命名。这样做符合你的意图吗?

@echo off
setlocal
set REMOTE=U:\ 
set LOG=C:\Integration\FE\log_test 
set PVM=%DATE:~9,4%-%DATE:~6,2%-%DATE:~3,2%
set YY=%DATE:~9,4% 
set LOCAL=C:\FTP\VC\test

xcopy /y /f /v "%LOCAL%\*.csv" "%REMOTE%\" >>%LOG%\%PVM%.log

pushd "%LOCAL%"
for %%I in (*.csv) do (
    rem Uncomment the following line to log the copy to archive.
    rem echo copy "%%I" -^> "%LOCAL%\archive\%%~nI-%PVM%.csv" >>%LOG%\%PVM%.log
    copy "%%I" "%LOCAL%\archive\%%~nI-%PVM%.csv">NUL
)
echo. >>%LOG%\%PVM%.log
popd

答案 1 :(得分:2)

在RENAME中使用通配符很棘手。没有好的官方文档,但我已经试验并发布了它的工作原理:见How does the Windows RENAME command interpret wildcards?

您可以使用以下命令完成重命名,只要您的文件名都不包含点(最后一个扩展点为OK)。

ren "%LOCAL%\archive\*.csv" ????????????????????-%PVM%*

?的数量必须大于或等于文件夹中的最长名称。

如果文件名包含点,则结果将不正确。例如,part1.part2.csv将变为part1-2013-02-15.part2.csv

另一种选择是使用FOR循环。您可以使用此技术将日期安全地附加到任何文件。

for %%F in ("%LOCAL%\archive\*.csv") do ren "%%F" "%%~nF-%PVM%%%~xF"

但是,如果您以后重新运行该过程,这两种解决方案都会出现问题。新文件将添加到存档中,但新旧存档文件将重命名为当前日期。那不行。

最好使用rojo's answer中建议的FOR循环一步复制和重命名文件。

或者更好的是,创建一个新的存档文件夹,其中包含文件夹名称中的日期,然后将文件复制到日期存档文件夹而不重命名:-)

set REMOTE=U:\ 
set LOG=C:\Integration\FE\log_test 
set PVM=%DATE:~9,4%-%DATE:~6,2%-%DATE:~3,2%
set YY=%DATE:~9,4% 
set LOCAL=C:\FTP\VC\test
cd %LOCAL%

xcopy /y /f /v "%LOCAL%\*.csv" "%REMOTE%\" >>%LOG%\%PVM%.log 
md "%LOCAL%\archive\%PMV%
xcopy /y /f /v "%LOCAL%\*.csv" "%LOCAL%\archive\%PVM%"

如果进程可以在同一天多次运行,您可能希望在文件夹名称中包含时间。