找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30095|回复: 7

[文本处理] 如何用robocopy备份整盘小于10k的zip和rar

[复制链接]
发表于 2019-6-14 08:34:36 | 显示全部楼层 |阅读模式
包括子目录上的,批处理实现自动备份到某个文件夹。
如果遇到相同文件名,自动将目标文件名改名。
发表于 2019-6-14 12:19:22 | 显示全部楼层
自动将目标文件名改名成什么样子?
 楼主| 发表于 2019-6-14 12:46:57 | 显示全部楼层
回复 2# Batcher

-001好了。
发表于 2019-6-15 10:09:55 | 显示全部楼层
本帖最后由 miqilaosu 于 2019-6-15 15:57 编辑
  1. @echo off
  2. set "kb=d:"
  3. for /f "delims=" %%i in ('dir /a-d /b *.zip,*.rar /s') do (
  4.         if "%%~zi" lss 10240 (
  5.                 if not exist "%kb%%%~pi%%~nxi" (
  6.                         echo F|xcopy "%%i" "%kb%%%~pi%%~nxi"
  7.                 ) else (
  8.                         echo F|xcopy "%%i" "%kb%%%~pi%%~ni-001%%~xi"
  9.                 )
  10.                
  11.         )
  12. )
复制代码
这个只能在根目录下执行,d:是你要复制到的那个盘或目录,xcopy我没加属性,你根据自己的需求添加
如果你备份C盘的文件一定不要保存到C盘 不然有可能重复执行
%%~nxi这个是原文件名
%%~ni-001%%~xi这个是改后的文件名
%kb%%%~pi如果你要是不需要结构一样,就把这个直接换成你的目录就行,但是这样的话可能就会出现很多*.zip-001-001的文件,因为你不敢保证整个盘重名文件就两个
你这里有一点我没弄清楚 ,就是已存在文件改名;还是已存在文件不动,复制过去的文件改名。这两种不同,如果是已存在文件改名,就把else里的代码换成下面的代码:
  1. ren %kb%%%~pi%%~nxi %kb%%%~pi%%~ni-001%%~xi
  2. echo F|xcopy "%%i" "%kb%%%~pi%%~nxi"
复制代码
如果考虑到多次复制的话 重命名那里以后肯定会出问题,除非是将要复制到的文件夹名字有变化比如以日期命名的文件夹,也就是我这里的d:,或者说你可以直接用变量%%~ti获取文件的时间,我这里获取的是当前年月日
  1. @echo off
  2. set "kb=d:\1"
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /a-d /b *.zip,*.rar /s') do (
  5.         if "%%~zi" lss 10240 (
  6.                 if not exist "%kb%%%~pi%%~nxi" (
  7.                         echo F|xcopy "%%i" "%kb%%%~pi%%~nxi"
  8.                 ) else (
  9.                         set "date=!date:~0,10!
  10.                         set "date=!date:/=!"
  11.                         set "date=!date:-=!"
  12.                         ren %kb%%%~pi%%~nxi %kb%%%~pi%%~ni!date!%%~xi
  13.                         echo F|xcopy "%%i" "%kb%%%~pi%%~nxi"
  14.                 )
  15.                
  16.         )
  17. )
复制代码
这样如果复制到同一个目录每天执行一次的话也不会出错了
 楼主| 发表于 2019-6-15 18:02:00 | 显示全部楼层
本帖最后由 netdzb 于 2019-6-15 18:05 编辑

回复 4# miqilaosu

已经存在的文件不动,复制过去的文件改名应该如何操作?假设我某盘压缩包的主文件名相同的数量有好几个,压缩包里面的内容是不同的。
也就是相同的需要001,002,003的排序该怎么写代码?
谢谢!
 楼主| 发表于 2019-6-15 21:19:21 | 显示全部楼层
回复 4# miqilaosu

if "%%~zi" lss 10240
    ~~~~~
    代表什么意思?
发表于 2019-6-16 08:30:10 | 显示全部楼层
本帖最后由 miqilaosu 于 2019-6-16 14:41 编辑

回复 6# netdzb


    if %%~zi lss 10240

     因为%%i是文件,%%~zi就是文件大小
你可以在cmd里输入call /?  查询相关用法
这名的意思是如果%%~zi得到的字节小于10240(相当于10kb,1kb=1024b)
不要用引号,上边写引号的有问题
发表于 2019-6-16 10:39:38 | 显示全部楼层
本帖最后由 miqilaosu 于 2019-6-16 14:52 编辑

回复 2# Batcher
这个代码运行提示找不到%i,自己测试了下,是在第二个%i那出的错,但一直找不到问题所在,请版主大大帮忙看看
  1. @echo on
  2. set "kb=d:"
  3. setlocal enabledelayedexpansion

  4. for /f "delims=*" %%i in ('dir /a-d /b *.zip,*.rar /s') do (
  5. set n=1001
  6.         if %%~zi lss 10240 (
  7.                 if not exist "%kb%%%~pi%%~nxi" (
  8.                         echo,F|xcopy "%%i" "%kb%%%~pi%%~nxi" /e
  9.                 ) else (
  10.                 :cz
  11.                 if not exist "%kb%%%~pi%%~ni!n!%%~xi" (
  12.                 echo,F|xcopy "%%i" "%kb%%%~pi%%~ni!n:~1!%%~xi" /e /y
  13.                 ) else (
  14.                 set /a n+=1
  15.                 goto:cz
  16.                 )
  17.                 )

  18.                
  19.         )
  20. )
复制代码
上边的代码不知道为什么不能执行希望有大神解答,下边我用的笨办法做了一个,我想重名的文件不会超过50个吧,如果超过的话你自己改数吧,就是这样做执行起来太慢了点
  1. @echo off
  2. set "kb=d:\b"
  3. setlocal enabledelayedexpansion

  4. for /f "delims=*" %%i in ('dir /a-d /b *.zip,*.rar /s') do (
  5. set n=1001
  6.         if %%~zi lss 10240 (
  7.                 if not exist "%kb%%%~pi%%~nxi" (
  8.                         echo,F|xcopy "%%i" "%kb%%%~pi%%~nxi" /e
  9.                 ) else (
  10.                                         for /l %%a in (1,1,50) do (
  11.                                                 if exist "%kb%%%~pi%%~ni-!n:~1!%%~xi" (
  12.                                                 set /a n+=1
  13.                                                 )
  14.                                         )
  15.                         echo,F|xcopy "%%i" "%kb%%%~pi%%~ni-!n:~1!%%~xi"
  16.                         )
  17.                 )

  18.         )
  19. )
复制代码
刚才FOR 循环忘了加/l报错了,这回加上了,我测试执行成功,还有之前我犯了个错误%%~zi,用引号引起来成了字符串对比,得到的文件大小不对,一定不能加引号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:00 , Processed in 0.018977 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表