我需要创建一个批处理文件来复制一些文件。 我在一个文件夹上有几个文件,所有这些文件都是文件名的一部分,只有部分文件具有当前日期。 即:
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
有什么想法吗?
非常感谢任何帮助
答案 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%