蝙蝠文件获取日期变量文件名

时间:2019-05-09 13:30:08

标签: windows batch-file robocopy

每天,用户本地计算机上的目录中都会生成许多文件,其名称结构如下:

8-05-21_09-05-2019_wolverine_WCALL1-010
hour_date_username_computername 

问题: 我需要一个批处理文件来运行robocopy来复制仅在实际一天中生成的文件。像这样:

robocopy  09-05-2019 \\server\files\8-05-21_09-05-2019_wolverine_WCALL1-010

那么,如何获取文件名中间的日期?

3 个答案:

答案 0 :(得分:0)

如果只想使用名称,这是一种方法。

@echo off
set day=0
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "yyyy=%result:~0,4%"
set "mm=%result:~4,2%"
set "dd=%result:~6,2%"
set "modD=%dd%-%mm%-%yyyy%
for /f %%i in ('dir /b /a-d ^| findstr "_%modD%"') do (
    robocopy "source" "destination" %%~i
)

答案 1 :(得分:0)

使用中的,您可以使用/MaxAge选项仅选择最近24小时内修改的文件,其值为1

@RoboCopy "SourceDirectory" "DestinationDirectory" /MaxAge:1

如果您只需要修改过的文件,则可能会更容易使用中的执行任务:

@PowerShell -NoP "$d=$(Get-Date).ToString('yyyyMMdd');RoboCopy "SourceDirectory" "DestinationDirectory" /MaxAge:$d"

答案 2 :(得分:0)

以独立于语言环境/用户设置的方式获取日期(此处为PowerShell)
在日期周围使用通配符以仅选择包含该日期的文件。

@Echo off
for /f %%A in ('powershell -NoP -c "get-date -f dd-MM-yyyy"') do set "dt=%%A"
RoboCopy "x:\sourcepath" "\\server\files" "*_%dt%_*"