批处理文件复制一些文件并更改其名称

时间:2013-11-19 17:59:12

标签: batch-file cmd batch-rename

我需要创建一个批处理文件来复制一些文件。 我在一个文件夹上有几个文件,所有这些文件都是文件名的一部分,只有部分文件具有当前日期。 即:

backupone_2013-11-19.zip
backupone_2013-11-18.zip
backupone_2013-11-17.zip

backuptwo_2013-11-19.zip
backuptwo_2013-11-18.zip
backuptwo_2013-11-17.zip

我需要复制(复制在同一文件夹中)只有那些以当前日期命名的文件,用格式命名新文件(左8个字符)&“last”.zip

使用相同的例子,它应该是:

backupone_2013-11-19.zip
backupone_2013-11-18.zip
backupone_2013-11-17.zip

backuptwo_2013-11-19.zip
backuptwo_2013-11-18.zip
backuptwo_2013-11-17.zip

backupone_last.zip
backuptwo_last.zip

“最后”文件与当天相关

我知道如何选择要复制的文件(具有今天日期的文件),但我可以提取他们的左侧文件名字母将其复制为新文件


更新

我一直在尝试以下脚本:

这些是文件

C:\temp\test>dir *.zip /B
backupone__2013-11-18__16-18-53(Completo).zip
backupone__2013-11-19__16-18-53(Completo).zip
backupthree__2013-11-18__16-18-53(Completo).zip
backupthree__2013-11-19__16-18-53(Completo).zip
backuptwo__2013-11-19__16-18-53(Completo).zip

这是完整的脚本

@echo off
cls
rem ----------------------------------------------

REM #### Today´s date
rem DATE FORMAT YYYY-MM-DD
SET fechahoy=%date:~6,4%-%date:~3,2%-%date:~0,2%
echo -----------------Debug: fechahoy
echo %fechahoy%
echo.

REM #### directory where the files are saved
cd "C:\temp\test\"
echo -----------------Debug: dir 
echo  "*%fechahoy%*".zip 
echo.

dir /B /A-D "*%fechahoy%*".zip 
echo.

for /f "Tokens=1 delims=_" %%a in ("C:\temp\test\*%fechahoy%*.zip") do (
 echo %%a_Last.zip 
)

,结果如下:

-----------------Debug: fechahoy
2013-11-19

-----------------Debug: dir
 "*2013-11-19*".zip

backupone__2013-11-19__16-18-53(Completo).zip
backupthree__2013-11-19__16-18-53(Completo).zip
backuptwo__2013-11-19__16-18-53(Completo).zip

C:\temp\test\*2013-11-19*.zip_Last.zip

有什么想法吗?

非常感谢任何帮助

4 个答案:

答案 0 :(得分:1)

这会使用您的代码并更改最后一个循环。它只会回显ren命令,所以删除echo并运行它以使其正常运行。

@echo off
cls
rem ----------------------------------------------

REM #### Today´s date
rem DATE FORMAT YYYY-MM-DD
SET fechahoy=%date:~6,4%-%date:~3,2%-%date:~0,2%
echo -----------------Debug: fechahoy
echo %fechahoy%
echo.

REM #### directory where the files are saved
cd "C:\temp\test\"
echo -----------------Debug: dir 
echo  "*%fechahoy%*".zip 
echo.


for /f "Tokens=1,* delims=_" %%a in ('dir /B /A-D "*%fechahoy%*.zip" ') do (
 echo ren "%%a_%%b" "%%a_Last.zip"
)

答案 1 :(得分:0)

这是一种方式:

 for /f "Tokens=1 delims=_" %%a in ( 
      "backuptwo_2013-11-19.zip") do ( echo %%a_Last.zip )

您也可以使用SET提取8或9个字符。

 SET bu=backuptwo_2013-11-19.zip & set bu=%bu:~0,9% & echo %bu%_Last.zip

答案 2 :(得分:0)

试试这个:

#! /bin/bash

# some configs

dirFrom=.
dirTo=.
suffix=$(date +%F).zip
newsuffix=last.zip

# end configs

# iterate over files to copy in the from directory
for file in $dirFrom/*$suffix
do
  # copy this file
  basename=$(basename $file)
  cp "$file" "${dirTo%/}/${basename%$suffix}$newsuffix"
done

答案 3 :(得分:0)

我建议使用realdatetime工具以确定的格式或年,月,日期分开时间(请再次检查realdatetime.exe文档以获取正确的命令行参数)。

@echo off
setlocal enabledelayedexpansion

for /F %%a in ('realdatetime.exe -f YYYY') do set curYear=%%a
for /F %%a in ('realdatetime.exe -f MM') do set curMonth=%%a
for /F %%a in ('realdatetime.exe -f DD') do set curDate=%%a

for %%a in (*_????-??-??.zip) do (
    for /F "tokens=1,2,3,4 delims=_-." %%m in ("%%a") do (
        echo %%m_%%n-%%o-%%p
        if %%n==!curYear! if %%o==!curMonth! if %%p==!curDate! (
            copy /Y %%a %%m_last.zip
        )
    )
)

如果日期格式已知(例如:YYYY-MM-DD),请尝试使用此代码设置今天的日期(不需要realdatetime.exe):

set curYear=%date:~0,4%
set curMonth=%date:~6,2%
set curDate=%date:~9,2%