数据库备份,只需要拷贝最近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 文件中上次修改的时间戳
-----------------------------------------------------------------------