在 windows 下,我们经常需要同步文件夹,微软给我们提供了一个很有用的工具:SyncToy 在这个软件中可以设置多对文件夹的之间的同步.还可以设置排除选项,功是很完善的,但是在实用过程中我们发现它对于文件夹同步工具来说好像还欠缺些么???嗯…对了,是后台实时同步,这一次我们就近似的去完成这个方案,这个方案好处有第一不依赖第三方软件,第二系统占用低,第三我们开始来实战吧.
主角:SyncToy官方下载链接,官方提供了32位和64位安装包,我们按照系统的版本来选择下载并安装.
安装完毕之后我们可以在安装文件夹中发现两个重要的可执行文件一个是图形UI版本synctoy.exe,另外一个是命令行版本synctoycmd.exe
windows自带的一个shell工具,我们今天来用一下吧.
shell可以执行脚本,扩展名是ps1.
这里我们需要关注一个小问题,在默认的情况下,windows是禁止执行ps1脚本的,执行后会类似的提示:
无法加载文件 ******.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 "get-help about_signing"。
所在位置 行:1 字符: 17
+ E:\Test\test.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [], PSSecurityException
+ FullyQualifiedErrorId : RuntimeException
不用着急,这个问题很容易解决,我们以管理员身份打开powershell,执行命令 Set-ExecutionPolicy RemoteSigned,然后出现提示
执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暂停(S) [?] 帮助 (默认值为“N”):
然后我们输入y或者a.
ok,策略修改完毕,小伙伴可以愉快的运行我们的ps1脚本了.
bat批处理是比较原始的shell脚本了,但是我们在这里还是要用一下,可以让我们的脚本运行的窗口隐藏起来.具体稍后再介绍.
随系统启动的话,很简单,只要把写好的bat批处理脚本放进启动文件夹.
只是我们需要找一下这个文件夹在哪里.\
C:\Users\(yourusername)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
把yourusername换成你自己的用户名就是我们需要找的文件夹了,感觉有点深.
这个部分我们参考一下CSDN的博文微软官方硬盘备份软件SyncToy
具体我就不再长篇大论了.
while(1){ #无限循环
& 'C:\Program Files\SyncToy 2.1\synctoycmd' -r #命令行执行同步所有的规则
sleep -seconds 5 #这一行是表示间隔5秒钟执行一次
}
把这几行代码保存一个脚本文件,文件名可以随意,扩展名ps1,
如果需要改变间隔时长只需改变数字即可,如果文件都是比较大的,间隔时间可以设置长一些.
这样我们可以双击这个文件来测试一下:\
SyncToy run of syncname (D:\path1\, C:\path2\) completed at 20xx/x/23 13:15:51.
SyncToy action was 'Synchronize'.
SyncToy options were:
Active for run all
All files included
No files excluded
Do not check file contents
Include read-only files
Include hidden files
Include system files
Backup older files (send to Recycle Bin)
No subfolders included
SyncToy run took 00:00:00:071.
Copied 0 bytes in 0 files in 00:00:00:71.
Bytes per second 0.0, files per second 0.0.
Avoided copying 200,320 bytes in 20 files that did not require action.
当返回有这样的类似的文本,表示脚本执行是ok的,我们可以在文件夹来新建/删除文件测试是否同步至另一个文件夹.
注意一下我这里设置的是5秒一次,所以同步需要稍等.
短短几行就解决问题了哦,看到了把,这边使用的是synctoycmd.exe哦,命令行的执行文件.
这样执行呢,是可以满足我们定时同步的问题,但是有一个命令行窗口一直开着总觉得不太舒服,而且没有自己启动,感觉不太高大上.
这一步我们需要建立一个只需要一行的bat批处理:
powershell.exe -WindowStyle Hidden -file D:\pathx\timesynctoy.ps1
我们来了解一下,-file参数后边是我们需要执行的ps1脚本的完整路径(必须完整),
-WindowStyle Hidden 参数是指定隐藏窗口.
然后保存好bat文件,文件名随意.
把bat文件复制到启动文件夹就全部完成了.\