使用命令行.cmd实现文件备份
实现环境
为了能让命令行代码每次都能成功运行,最好像图里这样先设置一下系统时间的格式:
重点在短时间格式那里,把月日时分秒都设置成两位数的,这样的好处是在获取时间的时候长度是固定的,不会在每天早上10点之前程序失效(因为这时候的小时是一位数)。
直接设置环境是个笨方法,巧妙的方法也许会有,暂时不会。总之配环境就是为了解决命令行程序在每天十点之前运行出错的问题。
新发现有个别人的处理方法挺好的,引用一下
链接: https://blog.csdn.net/qq_37858386/article/details/123728456
实现目的
在电脑更新了WIN11系统之后,由于ISE无法在WIN11系统下安装,所以把它装到了虚拟机里。我配置的环境是虚拟机和主机之间通过百度网盘的同步工作空间来同步程序和进行备份。百度网盘虽然自带有记录历史文件功能但是用在程序备份上有点蠢,个人又不习惯用github之类的东西,所以编了一个命令行程序用来自动备份我的程序和编译出的下载文件。这样不仅可以实现自动备份的功能,还可以将这段程序嵌入到其他动作里一起实现。例如我在使用ISE编译完.bit之后,直接运行一个.cmd文件,从命令行启动impact自动生成固化用的.mcs文件。此时固化程序之后我就需要产生一个新版本,就可以将自动备份的程序接在前面的动作之后。因此使用自己编写.cmd命令可以准确地在我确实需要的时候备份程序,而不会把我睡觉前保存的未完成的程序也备份起来。
实现功能
1.自动将设置路径下的代码复制到其他路径下一个以时间命名的新文件夹
2.自动将本次备份时间存储到文件以供日后进行比对
3.自动将和上次备份相比修改过的文件的文件名记录到文件,方便寻找更新内容
4.自动将工程目录下的编译输出文件同样备份到前面第一条里新建立的备份文件夹
代码实现
rem 是注释,删了就行
rem 获取工程路径
set miaoprojectpath=C:\Users\miao\BaiduSyncdisk\yingwenlujing
rem 获取上一次更新时间与上上次更新时间
for /f %%a in ('type %miaoprojectpath%\history\lastversion.dat') do (set lasttime=%%a)
rem 获取当前时间
set nowtimetemp=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
set nowtime=%nowtimetemp: =0%
rem 产生用于比较的时间
set comparedate=%lasttime:~2,6%
set comparetime=%lasttime:~8,4%
rem 本地备份编译过的文件
@copy top.bit history\top%nowtime%.bit
@copy top.mcs history\top%nowtime%.mcs
rem 建立云端备份文件夹
@xcopy %miaoprojectpath%\program %miaoprojectpath%\history\program_%nowtime% /S/I
rem 将编译过的文件在云端备份文件夹备份
@copy top.bit %miaoprojectpath%\history\program_%nowtime%\top%nowtime%.bit
@copy top.mcs %miaoprojectpath%\history\program_%nowtime%\top%nowtime%.mcs
rem 将本次更新时间写入记录文件
@echo %nowtime%:>>%miaoprojectpath%\history\record.txt
rem 寻找路径下编辑时间在上次更新时间之后的文件
@setlocal enabledelayedexpansion
for /r %miaoprojectpath%\program %%a in (*) do (
@set temp=%%~ta
@set filedate=!temp:~2,2!!temp:~5,2!!temp:~8,2!
@set filetime=!temp:~11,2!!temp:~14,2!
@echo filedate=!filedate!,filetime=!filetime!,comparedate=!comparedate!,comparetime=!comparetime!
if !filedate! gtr %comparedate% ( echo %%~nxa>>%miaoprojectpath%\history\record.txt)
if !filedate! equ %comparedate% ( if !filetime! gtr %comparetime% ( echo %%~nxa>>%miaoprojectpath%\history\record.txt))
)
@setlocal disabledelayedexpansion
rem 将记录文件也复制到备份路径下
@copy %miaoprojectpath%\history\record.txt %miaoprojectpath%\history\program_%nowtime%\record%nowtime%.txt
rem 将当前时间存入版本记录文件
@echo %nowtime%>%miaoprojectpath%\history\lastversion.dat
pause
备注
命令行程序是个挺危险的东西。最开始学的时候不小心把电脑里文件都给删了,不过还好是虚拟机,重新建一个虚拟机就好了。不建议在不懂含义的情况下随随便便地直接运行从网上获得的命令行程序,即使是本篇文章中的程序我觉得随便在任何一个电脑上运行都不会有什么严重后果,也建议只用于学习过程中参考实现思路,不要直接复制过去运行,至少先把里面的文件路径改成你电脑中的路径。
更多推荐
所有评论(0)