万企互联-专注高端网站建设
扫描关注万企互联微信公众账号

扫一扫微信二维码

bat脚本远程备份文件

编程代码2023/11/26 1095

配合Windows计划任务,编写脚本并设置定时启动

从192.168.1.1\test文件夹下复制全部文件到本地test文件夹下,并保留修改时间最近的3个sql文件,删除其他的sql文件


@echo off&setlocal enabledelayedexpansion
xcopy /F /d \\192.168.1.1\test\*.* F:\test\
pushd F:\test\
set n=0
for /f "delims=" %%a in ('dir /a-d-h /b /o-d *.sql') do (
if !n! geq 3 del "%%~a"
set /a n+=1
)
popd


脚本说明

xcopy

/f 复制时显示源文件名和目标文件名。

/d [:MM-DD-YYYY] 仅复制指定日期或之后更改的源文件。 如果未包含 MM-DD-YYYYY 值,xcopy则复制比现有目标文件更新的所有源文件。 此命令行选项允许更新已更改的文件。

setlocal enabledelayedexpansion 扩展本地环境变量延迟

在cmd执行命令前会对脚本进行预处理,其中有一个过程是变量识别过程,在这个过程中,如果有两个%括起来的如%value%类似这样的变量,就会对其进行识别,并且查找这个变量对应的值,再而将值替换掉这个变量,这个替换值的过程,就叫做变量扩展,然后再执行命令。

但如果出现动态的情况会怎样?在cmd执行中,发生动态的一种情况是在 for语句中进行变量赋值。

开启了变量延迟,在for循环中每次赋予str的值才会被传递下去,但这里的str变量符必须要写成!str!

Pushd&Popd

Pushd 命令

改变当前目录到指定目录,并保存当前的目录在堆栈顶端

Popd 命令

改变当前目录,跳转到堆栈顶端保存的目录,并将堆栈顶端的目录删除

for

delims= 用来告诉for每一行应该拿什么作为分隔符

用%%a代替循环中的每一行(每个文件名)

EQU - 等于

NEQ - 不等于

LSS - 小于

LEQ - 小于或等于

GTR - 大于

GEQ - 大于或等于

set /a 是指定一个变量等于一串运算字符

dir /a-d-h /b /o-d *.sql

/a 仅显示具有指定属性的目录和文件的名称

d - 目录

h - 隐藏文件

s - 系统文件

可以使用这些值的任何组合,但不要使用空格分隔值。 (可选)可以使用冒号 (:) 分隔符,也可以使用连字符 (-) 作为前缀来表示“not”。 例如,使用 -s 属性不会显示系统文件

/b 显示目录和文件的裸列表,没有其他信息

/o[[:]] 根据 sortorder 对输出进行排序,它可以是以下值的任意组合

d - 按日期/时间,最早-使用前缀反转排序顺序

获取昨天的日期并格式化输出

配合vbs脚本

:: yesterdays date
@echo off
set day=-1
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 "data=%yyyy%-%mm%-%dd%"
echo Yesterday was "%data%"
pause


文章关键词
bat
备份
远程
万企互联 咸阳网站建设 万企微信 IDC主机测评 域名转发系统 IP地址查询 万企工具 超越彼岸BEYOND 六佰号MSDN系统 TOP图标库 六百号技术