forfiles 和 xcopy 在windows下拷贝N天内更改过的文件



数据库备份,只需要拷贝最近1个月内的数据库备份到另一台服务器就行.
而且只是用windows作业来执行.
由于对windows命令也不太熟悉,使用命令的时候真是黔驴尽穷啊!~
要什么命令没什么,各种计算都不方便.
为了这日期的计算,花了很长时间.
网上最多的也是最简单的,也就是分别取出年月日,做加减后再拼接回来.
如:
echo %date:~0,4%-%date:~5,2%-%date:~8,2%

那么,问题来了.单独用月或日期做加减,月份有可能小于0,或者大于12.日期同理.

-----------------------------------------------------------------------

由于命令[xcopy]没有日期筛选,只能先从其他命令筛选出符合条件的文件再复制.
想起了一个命令[forfiles],有日期选择.高兴之余测试一下.发现选项[/d]的功能用不了

forfiles /d 

功能介绍如下:
选择文件,其上一次修改日期大于或等于 (+),或者小于或等于 (-) 用 "yyyy-MM-dd" 格式指定的日期;
或选择文件,其上一次修改日期大于或等于 (+)当前日期加 "dd" 天,
或者小于或等于 (-) 当前日期减 "dd" 天。有效的 "dd" 天数可以是0 - 32768 范围内的任何数字。
如果没有指定,"+" 被当作默认符号。

测试一下,只发现减号(-)能用,加号(+)不能用。即只能查到更改N天之前的文件,不能查更改在N天之内的文件!~
不过能找到就不错了。就用这个命令吧!

-----------------------------------------------------------------------

后来在这里找到了“同样”问题解决方法: http://bbs.csdn.net/topics/310080657



@echo off
rem 将指定目录的所有文件及文件夹copy到指定目录下,只copy 7天内创建的或是7天内修改过的
rem author:perfectaction

set "src=c:\test\" rem 源目录路径
set "des=d:\test\" rem 目标路径
set "suffix=txt"   rem 需要xcopy的文件后缀
set "dd=7"         rem 只copy7天之内的文件

del /f /q /a "%src%notcopylist_%suffix%.log" 2>nul
forfiles /p %src% /s /m *.* /d -%dd% /c "cmd /c dir @path /b /s >>%src%notcopylist_%suffix%.log"
if not exist "%src%notcopylist_%suffix%.log\" (
  if exist "%src%notcopylist_%suffix%.log" (
    xcopy "%src%*.%suffix%" "%des%" /s /d /y /EXCLUDE:%src%notcopylist_%suffix%.log
  ) else (
    xcopy "%src%*.%suffix%" "%des%" /s /d /y
  )
) else (
  echo 错误:无法创建%src%notcopylist_%suffix%.log文件,当前目录存在同名文件夹。
)
rem pause


-----------------------------------------------------------------------

试用发现不行,嫌着麻烦,不用这个了,自己改吧:

#1.输入目录(E:\历史文件A\*.txt)下的所有文件名称(路径+文件名)到文件中outfile.txt
#第一行,输出路径无引号,如:E:\历史文件A\20140812.txt
#第二行,输出路径有引号(不用这个)如:"E:\历史文件A\20140812.txt"
forfiles /p "E:\历史文件A" /m *.txt /d -30 /c "cmd /c dir @path /b/s" >"E:\outfile.txt"
--forfiles /p "E:\历史文件A" /m *.txt /d -7 /c "cmd /c echo @path" >E:\outfile.txt


#2.再执行复制,同时用EXCLUDE用于排除不复制的文件
xcopy "E:\历史文件A\*.txt" "E:\历史文件B\" /d /y /EXCLUDE:E:\outfile.txt 

成功!!~~

-----------------------------------------------------------------------

最终命令:
backup.bat

forfiles /p "E:\历史文件A" /m *.txt /d -30 /c "cmd /c dir @path /b/s" >"E:\outfile.txt"
xcopy "E:\历史文件A\*.txt" "E:\历史文件B\" /d /y /EXCLUDE:E:\outfile.txt 

-----------------------------------------------------------------------

#查看命令使用说明
Forfiles /?

命令参数[/c]可用变量说明:
变量 描述
@file 文件名
@fname 无扩展名的文件名
@ext 文件扩展名
@path 文件的完整路径
@relpath文件的相对路径
@isdir 如果文件类型是目录,则计算值为 TRUE,否则值为 FALSE
@fsize 用字节表示的文件大小
@fdate 文件中上次修改的日期戳
@ftime 文件中上次修改的时间戳


-----------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值