标题: [文本处理] 如何用robocopy备份整盘小于10k的zip和rar [打印本页]
作者: netdzb 时间: 2019-6-14 08:34 标题: 如何用robocopy备份整盘小于10k的zip和rar
包括子目录上的,批处理实现自动备份到某个文件夹。
如果遇到相同文件名,自动将目标文件名改名。
作者: Batcher 时间: 2019-6-14 12:19
自动将目标文件名改名成什么样子?
作者: netdzb 时间: 2019-6-14 12:46
回复 2# Batcher
-001好了。
作者: miqilaosu 时间: 2019-6-15 10:09
本帖最后由 miqilaosu 于 2019-6-15 15:57 编辑
- @echo off
- set "kb=d:"
- for /f "delims=" %%i in ('dir /a-d /b *.zip,*.rar /s') do (
- if "%%~zi" lss 10240 (
- if not exist "%kb%%%~pi%%~nxi" (
- echo F|xcopy "%%i" "%kb%%%~pi%%~nxi"
- ) else (
- echo F|xcopy "%%i" "%kb%%%~pi%%~ni-001%%~xi"
- )
-
- )
- )
复制代码
这个只能在根目录下执行,d:是你要复制到的那个盘或目录,xcopy我没加属性,你根据自己的需求添加
如果你备份C盘的文件一定不要保存到C盘 不然有可能重复执行
%%~nxi这个是原文件名
%%~ni-001%%~xi这个是改后的文件名
%kb%%%~pi如果你要是不需要结构一样,就把这个直接换成你的目录就行,但是这样的话可能就会出现很多*.zip-001-001的文件,因为你不敢保证整个盘重名文件就两个
你这里有一点我没弄清楚 ,就是已存在文件改名;还是已存在文件不动,复制过去的文件改名。这两种不同,如果是已存在文件改名,就把else里的代码换成下面的代码:- ren %kb%%%~pi%%~nxi %kb%%%~pi%%~ni-001%%~xi
- echo F|xcopy "%%i" "%kb%%%~pi%%~nxi"
复制代码
如果考虑到多次复制的话 重命名那里以后肯定会出问题,除非是将要复制到的文件夹名字有变化比如以日期命名的文件夹,也就是我这里的d:,或者说你可以直接用变量%%~ti获取文件的时间,我这里获取的是当前年月日- @echo off
- set "kb=d:\1"
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /a-d /b *.zip,*.rar /s') do (
- if "%%~zi" lss 10240 (
- if not exist "%kb%%%~pi%%~nxi" (
- echo F|xcopy "%%i" "%kb%%%~pi%%~nxi"
- ) else (
- set "date=!date:~0,10!
- set "date=!date:/=!"
- set "date=!date:-=!"
- ren %kb%%%~pi%%~nxi %kb%%%~pi%%~ni!date!%%~xi
- echo F|xcopy "%%i" "%kb%%%~pi%%~nxi"
- )
-
- )
- )
复制代码
这样如果复制到同一个目录每天执行一次的话也不会出错了
作者: netdzb 时间: 2019-6-15 18:02
本帖最后由 netdzb 于 2019-6-15 18:05 编辑
回复 4# miqilaosu
已经存在的文件不动,复制过去的文件改名应该如何操作?假设我某盘压缩包的主文件名相同的数量有好几个,压缩包里面的内容是不同的。
也就是相同的需要001,002,003的排序该怎么写代码?
谢谢!
作者: netdzb 时间: 2019-6-15 21:19
回复 4# miqilaosu
if "%%~zi" lss 10240
~~~~~
代表什么意思?
作者: miqilaosu 时间: 2019-6-16 08:30
本帖最后由 miqilaosu 于 2019-6-16 14:41 编辑
回复 6# netdzb
if %%~zi lss 10240
因为%%i是文件,%%~zi就是文件大小
你可以在cmd里输入call /? 查询相关用法
这名的意思是如果%%~zi得到的字节小于10240(相当于10kb,1kb=1024b)
不要用引号,上边写引号的有问题
作者: miqilaosu 时间: 2019-6-16 10:39
本帖最后由 miqilaosu 于 2019-6-16 14:52 编辑
回复 2# Batcher
这个代码运行提示找不到%i,自己测试了下,是在第二个%i那出的错,但一直找不到问题所在,请版主大大帮忙看看- @echo on
- set "kb=d:"
- setlocal enabledelayedexpansion
-
- for /f "delims=*" %%i in ('dir /a-d /b *.zip,*.rar /s') do (
- set n=1001
- if %%~zi lss 10240 (
- if not exist "%kb%%%~pi%%~nxi" (
- echo,F|xcopy "%%i" "%kb%%%~pi%%~nxi" /e
- ) else (
- :cz
- if not exist "%kb%%%~pi%%~ni!n!%%~xi" (
- echo,F|xcopy "%%i" "%kb%%%~pi%%~ni!n:~1!%%~xi" /e /y
- ) else (
- set /a n+=1
- goto:cz
- )
- )
-
-
- )
- )
复制代码
上边的代码不知道为什么不能执行希望有大神解答,下边我用的笨办法做了一个,我想重名的文件不会超过50个吧,如果超过的话你自己改数吧,就是这样做执行起来太慢了点- @echo off
- set "kb=d:\b"
- setlocal enabledelayedexpansion
-
- for /f "delims=*" %%i in ('dir /a-d /b *.zip,*.rar /s') do (
- set n=1001
- if %%~zi lss 10240 (
- if not exist "%kb%%%~pi%%~nxi" (
- echo,F|xcopy "%%i" "%kb%%%~pi%%~nxi" /e
- ) else (
- for /l %%a in (1,1,50) do (
- if exist "%kb%%%~pi%%~ni-!n:~1!%%~xi" (
- set /a n+=1
- )
- )
- echo,F|xcopy "%%i" "%kb%%%~pi%%~ni-!n:~1!%%~xi"
- )
- )
-
- )
- )
复制代码
刚才FOR 循环忘了加/l报错了,这回加上了,我测试执行成功,还有之前我犯了个错误%%~zi,用引号引起来成了字符串对比,得到的文件大小不对,一定不能加引号
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |