一次惨痛教训让我写了个Windows定期备份文件脚本

news2025/7/17 20:41:45

目录

    • 前言
    • 正文

前言

说实话在写这篇文章的时候,咸鱼不禁又想起了那件男默女泪的往事

我喜欢做笔记,我觉得好记性不如烂笔头,所以在我的学习生涯以及职业生涯阶段,我用过四款笔记应用——Onenote、语雀、印象笔记、Typora

其中我个人觉得体验最好的非 Typora 莫属了

在这里插入图片描述
在 2022 年的时候,由于 Typora 收费,我就寻思网上找个破解版的用用(白嫖这一块嗷

没想到一顿操作下来,我误删了现在的软件,更加可恨的是,我当时 Typora 文件是存放在程序的目录之下!!!

如下图所示:
在这里插入图片描述

于是当我意识到我辛辛苦苦写下的笔记全部都没有了的时候,那一瞬间我崩溃了

赶紧上某鱼看看有没有帮忙恢复数据的服务,尽管到最后数据是恢复了,但内容全是乱码(再度崩溃)

在这里插入图片描述

在这里插入图片描述
经过这么一件惨案,咸鱼痛定思痛,于是决定写一个定期自动备份文件的 Windows 脚本

在写这个脚本之前,我们先来学习一下脚本当中用到的命令

xcopy

微软官方介绍:https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/xcopy

Copies files and directories, including subdirectories

可以看到,xcopy 用于复制文件和目录,包括子目录

#语法
Xcopy <Source> [<Destination>] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d [:MM-DD-YYYY]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a | /m}] [/n] [/o] [/x] [/exclude:FileName1[+[FileName2]][+[FileName3]]] [{/y | /-y}] [/z] [/b] [/j] [/compress]

#<Source>: 指定要复制的文件的位置和名称,这个参数必须包含驱动器或路径
#<Destination>:指定要复制的文件的目标,这个参数可以包含驱动器号和冒号、目录名称、文件名或它们的组合

参数如下:

参数说明
/W显示以下消息,并在开始复制文件之前等待响应: 按任意键开始复制文件 ()
/p提示确认是否要创建每个目标文件。
/c忽略错误。
/v在写入目标文件时验证每个文件,以确保目标文件与源文件相同。
/q禁止显示 xcopy 消息。
/f复制时显示源和目标文件名。
/l生成要复制的文件列表,但不主动复制文件。
/G目标 不支持加密时,创建解密的目标文件。
/d
[:MM-DD-YYYY]
仅复制指定日期或之后更改的源文件。
如果未包含 MM-DD-YYYY 值,xcopy则 复制比现有目标文件更新的所有源文件。 此命令行选项允许更新已更改的文件。
/U从仅存在于目标上的复制文件。
/i如果 source 为目录或包含通配符且目标不存在, xcopy 则假定 destination 指定目录名称并创建新目录。
然后, xcopy 将所有指定的文件复制到新目录中。
默认情况下, xcopy 会提示指定目标是文件还是目录。
/s复制目录和子目录,除非它们为空。
如果省略 /s,可在 xcopy 单个目录中工作。
/e复制所有子目录,即使它们为空。
/e/s/t 命令行选项一起使用。
/t复制子目录结构 (,即树) ,而不复制文件。
若要复制空目录,必须包含 /e 命令行选项。
/k复制文件并保留 目标 文件上的只读属性(如果 源文件 上存在)。
默认情况下, xcopy 删除只读属性。
/r复制只读文件。
/h复制具有隐藏和系统文件属性的文件。
默认情况下, xcopy 不会复制隐藏的文件或系统文件
/a仅复制设置了存档文件属性的 源文件/a 不会修改源文件的存档文件属性。
/m复制设置了存档文件属性的 源文件
与 **/a **不同, /m 关闭源中指定的文件中的存档文件属性。
/n使用 NTFS 短文件或目录名称创建副本。
将文件或目录从 NTFS 卷复制到 FAT 卷时,或者当 FAT 文件系统命名约定 (目标文件系统上需要 8.3 个字符) 时,需要 /n。 destinatio*文件系统可以是 FAT 或 NTFS。
/o复制文件所有权和自由访问控制列表 (DACL) 信息。
/x复制文件审核设置和系统访问控制列表 (SACL) 信息 (暗示 /o) 。
/Y取消提示,确认是否要覆盖现有目标文件。
/-Y提示确认是否要覆盖现有目标文件。
/z在可重启模式下通过网络复制。
/b复制符号链接而不是文件。 此参数是在 Windows Vista® 中引入的。
/j在不缓冲的情况下复制文件。 建议用于非常大的文件。 此参数已添加到 Windows Server 2008 R2 中。
/compress在文件传输过程中请求网络压缩。
/?在命令提示符下显示帮助。

关于 xcopy 的一些使用指南

  • 使用 /z

加上 /z 参数表示可以在重启的模式下通过网络进行复制

如果你在复制阶段,网络断开了,则连接会在重新建立连接之后恢复,加了/z 参数还能够显示每个文件完成复制操作的百分比

  • 复制加密文件

如果在复制加密文件过程中碰到不支持 EFS 的 volume,会报错

你需要先将文件解密,然后复制,之后再重新加密;又或者可以将加密文件复制到支持 EFS 的 volume

  • 追加文件

如果想要追加文件,把 Destination 指定成单个文件,但 source 是指定多个文件(使用通配符 or file1+file2+file3 格式)

  • Destination 默认值

如果省略 Destination,xcopy 则会将文件复制到当前目录

  • 提示指定 Destination 是文件还是目录

如果你的 Destination 不包含现有的目录,而且没有以反斜杠结尾,系统就会提示你

Does <Destination> specify a file name or directory name on the target(F = file, D = directory)?

如果希望将一个或多个文件复制到某个文件,请按 F;如果希望将一个或多个文件复制到目录,请按 D

如果你不想这条提示出现,可以加上 /i 参数禁止显示此消息

如果 source 是多个文件或目录,则会导致 xcopy 假定目标为目录

正文

在了解了 xcopy 之后,就正式开始脚本的编写吧!

首先我们需要知道你笔记的路径,我笔记的路径是存放在D:\studynote下,而我笔记上面的图片的存放路径却是在C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images

其次定义变量

#源笔记路径
set src_file=D:\studynote

#源图片路径
set src_imgs=C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images

#目标笔记路径
set des_file=E:\typora_backup\typora-%date:~0,4%%date:~5,2%%date:~8,2%\studynote

#目标图片路径
set des_images=E:\typora_backup\typora-%date:~0,4%%date:~5,2%%date:~8,2%\images

其中%date:~0,4%%date:~5,2%%date:~8,2%表示加上当前日期

具体原理如下:

在 Windows cmd 命令行窗口执行date命令后这个环境变量的值为

在这里插入图片描述

%date:~0,4% 表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取4位字符(结果是 2023,即年份)

%date:~5,2% 表示指针从左向右偏移5位,然后从偏移处开始提取2位字符(结果是03,月份)

%date:~8,2% 表示指针从左向右偏移8位,然后从偏移处开始提取2位字符(结果是07,日份)

接下来我们使用 xcopy 命令

#复制笔记
xcopy %src_file% %des_file% /e/I

#复制笔记中的图片
xcopy %src_imgs% %des_images% /e/I

点击保存,后缀名改成 bat,然后执行,就可以看到备份成功了!

在这里插入图片描述
那有小伙伴可能会说,现在只是实现了备份功能,定期备份怎么实现呢

这里我们用 Windows 的任务计划来实现

打开任务计划程序,选择右上角的创建基本任务

在这里插入图片描述
在这里插入图片描述
设置备份时间为每个月的周一早上九点

在这里插入图片描述
在这里插入图片描述
选择执行脚本

在这里插入图片描述
在这里插入图片描述

这样一个定时备份的程序就完成了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/395799.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nacos配置中心,分组配置参考,以及python、go、bash客户端连接获取

Nacos使用说明 nacos官方网站 https://nacos.io/zh-cn/docs/v2/what-is-nacos.html 1、基本配置说明 nacosIP地址&#xff1a;http://xxxxx:8848/nacos/ 服务管理端登录账号&#xff1a;nacos XXX Java最小配置&#xff0c;其他客户端可参考&#xff0c;配置可对应到第三章…

【动态规划】

动态规划1引言题目509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯小结53. 最大子数组和结语引言 蓝桥杯快开始了啊&#xff0c;自从报名后还没认真学过算法有(>﹏<)′&#xff0c;临时抱一下佛脚&#xff0c;一起学学算法。 题目 509. 斐波那契数 斐波那契数 &am…

你来看看这几行代码到底创建了几个字符串?

&#x1f497;推荐阅读文章&#x1f497; &#x1f338;JavaSE系列&#x1f338;&#x1f449;1️⃣《JavaSE系列教程》&#x1f33a;MySQL系列&#x1f33a;&#x1f449;2️⃣《MySQL系列教程》&#x1f340;JavaWeb系列&#x1f340;&#x1f449;3️⃣《JavaWeb系列教程》…

Java中对象的finalization机制

本篇文章我们详细介绍Java中对象的finalization机制&#xff0c;以及怎么使用finalize()方法&#xff0c;将即将被回收的对象&#xff0c;拉回来。1、finalization机制Java语言提供了对象终止&#xff08;finalization&#xff09;机制来允许开发人员提供对象被销毁之前的自定义…

Spring的Async注解线程池扩展方案

目录- [Spring的Async注解线程池扩展方案]- [目录]- [1. 扩展目的]- [2. 扩展实现]- [2.1 扩展Async注解的执行拦截器AnnotationAsyncExecutionInterceptor]- [2.2 扩展Async注解的Spring代理顾问AsyncAnnotationAdvisor]- [2.3 扩展Async注解的 Spring Bean 后置处理器AsyncAn…

Linux安装及管理应用和账号和权限管理 讲解

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的绽放&#xff0…

不系统学习NodeJs之进程线程

不系统学习NodeJs之进程线程 从工作期间断断续续接触Node&#xff0c;从去年的3月份、10月份、又到今年的3月份&#xff0c;终于又决定要再仔细看看Node的相关。 不系统学习的各种时期笔记&参考记录于此。 参考&#xff1a; Node.js 中文网 一篇文章构建你的 NodeJS 知识…

BIC高颜值在线绘图新增颜色集合本地存储功能

用户可以把自己选择的颜色集合存储在自己浏览器本地(鼠标滑过颜色名字可以显示具体代表哪些颜色和色号)&#xff0c;供同一个工具的多套数据使用或者在不同工具之间共享颜色集合的使用&#xff0c;统一多张图一致的配色。最新访问地址&#xff1a;https://www.bic.ac.cn/BIC/ &…

JavaWeb—CSS

目录 &#xff11;、CSS 技术 &#xff11;.&#xff11;、CSS 技术介绍 &#xff11;.&#xff12;、CSS 语法规则&#xff1a; &#xff11;.&#xff13;、CSS 和 HTML 的结合方式 &#xff11;.&#xff13;.&#xff11;、第一种&#xff1a; &#xff11;.&#xf…

Iterator 迭代器

迭代器 为了兼顾 各个子类的特性 实现无差别可以 访问数据 举个例子 遍历数组和遍历链表 两者代码的写法不一样 为了实现 使用相同的代码 对不同的数据容器进行遍历 就出现了 迭代器 for语句的执行和 interator的实现息息相关 目的 访问各个类型 集合 的数据&#xff…

Spring源码解析-Spring 循环依赖

Spring源码解析简图&#xff1a; Spring 如何解决循环依赖&#xff0c;⽹上的资料很多&#xff0c;但是感觉写得好的极少&#xff0c;特别是源码解读⽅⾯&#xff0c;我就⾃⼰单独出⼀ 篇&#xff0c;这篇⽂章绝对肝&#xff01; 文章目录&#xff1a; 一. 基础知识 1.1 什么…

记录--elementui源码学习之仿写一个el-button

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 本篇文章记录仿写一个el-button组件细节&#xff0c;从而有助于大家更好理解饿了么ui对应组件具体工作细节。本文是elementui源码学习仿写系列的又一篇文章&#xff0c;后续空闲了会不断更新并仿写其他…

Unity iOS 无服务器做一个排行榜 GameCenter

排行榜需求解决方案一(嗯目前只有一)UnityEngine.SocialPlatformsiOS GameCenterAppStoreConnect配置Unity 调用(如果使用GameCenter系统的面板&#xff0c;看到这里就可以了&#xff09;坑(需要获取数据做自定义面板的看这里)iOS代码Unity 代码吐槽需求 需求&#xff1a;接入…

某某游戏加密坐标分析

这个游戏里面坐标有很多种存放方式。 例如明文存放的DOUBLE&#xff0c;加密的各种类型。 我们不知道哪一个对于我们是有用的,哪一些只是辅助UI或则掉到LUA虚拟机坑里的数据。 那就根据作用大小来决定,一一尝试吧。 最好去找修改之后有效果的地址&#xff0c;当然只是本地&…

记一次影视cms黑盒CSRF-RCE

俗话说得好&#xff0c;思路才是最重要&#xff0c;本文章主要提供思路&#xff0c;各位师傅在挖掘漏洞的时候说不定也能碰到类似的点1.思路&#xff1a;当我们在找可以构建csrf的时候&#xff0c;多找找可以提交上传图片的&#xff0c;部分是可以自由构建url如图&#xff1a;漏…

Python数据分析案例20——我国家庭资产影响因素分析

本次案例较为简单&#xff0c;符合人文社科、经济学管理学等专业本科生适用。 本文的数据来源于中国家庭金融调查&#xff08;China Household Finance Survey&#xff0c;CHFS&#xff09;是西南财经大学中国家庭金融调查与研究中心&#xff08;下称中心&#xff09;在全国范围…

后端快速上手Vue+axios

文章目录前言vue基础1.el:挂载点2.data:数据对象vue常见指令vue生命周期axiosvueaxios前言 面向后端人员&#xff0c;旨在快速熟悉Vue框架&#xff0c;更详细的以后再总结 &#xff08;1&#xff09;Vue的特性&#xff1a; JavaScript框架简化Dom操作响应式数据驱动 &#…

JWT详细介绍使用

一、JWT介绍 JWT是JSON Web Token的缩写&#xff0c;即JSON Web令牌&#xff0c;是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息&#xff0c;以便于从资源服务…

【经验分享】电路板上电就挂?新手工程师该怎么检查PCB?

小伙伴们有没有经历过辛辛苦苦&#xff0c;加班加点设计的PCB&#xff0c;终于搞定下单制板。接下来焦急并且忐忑地等待PCB板到货&#xff0c;焊接&#xff0c;验证&#xff0c;一上电&#xff0c;结果直接挂了... 连忙赶紧排查&#xff0c;找问题。最终发现&#xff0c;是打过…

学习笔记:基于SpringBoot的牛客网社区项目实现(二)之Spring MVC入门

1.1 函数的返回值为空&#xff0c;因为可以使用response对象向浏览器返回数据。声明了request对象和response对象&#xff0c;dispatcherservlet自动将这两个对象传入 RequestMapping("/http")public void http(HttpServletRequest request, HttpServletResponse re…