每天,用户本地计算机上的目录中都会生成许多文件,其名称结构如下:
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
那么,如何获取文件名中间的日期?
答案 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)
使用robocopy中的batch-file,您可以使用/MaxAge
选项仅选择最近24小时内修改的文件,其值为1
:
@RoboCopy "SourceDirectory" "DestinationDirectory" /MaxAge:1
如果您只需要robocopy修改过的文件,则可能会更容易使用powershell中的batch-file执行任务:
@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%_*"