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

[文件操作] 【已解决】FOR如何批量复制前一个文件,每隔100个文件自动删除前99个文件

[复制链接]
发表于 2021-1-8 15:57:33 | 显示全部楼层 |阅读模式
本帖最后由 LINGX 于 2021-1-11 22:24 编辑

  1. COPY        *.001        *.002
  2. COPY        *.002        *.003
  3. COPY        *.003        *.004
  4. COPY        *.004        *.005
  5. COPY        *.005        *.006
  6. COPY        *.006        *.007
  7. COPY        *.007        *.008
  8. COPY        *.008        *.009
  9. COPY        *.009        *.010
复制代码
不知是否能用FOR语句实现以上功能?

注意:

不是重复COPY第1个文件*.001,是001复制为002,002复制为003……以此类推

以上经测试可用的代码是:
  1. @echo off&setlocal enabledelayedexpansion

  2. for /l %%i in (1001,1,1099) do (
  3.      set /a n=%%i,m=n+1
  4.      copy *.!n:~-3! *.!m:~-3!
  5. )

  6. del /F *.0??
复制代码
——感谢terse!


接下来是新的问题:

如何实现 每复制到*.100就自动删除*.001至*.099,并且保留
*.100
*.200(复制到第200代时作更名操作,以此类推)
*.300
……
*.1000
发表于 2021-1-8 17:59:56 | 显示全部楼层
回复 1# LINGX


test.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (1010,-1,1002) do (
  4.     set "m=%%i"
  5.     set /a n=m-1
  6.     copy /y *.!n:~1! *.!m:~1!
  7. )
复制代码
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
发表于 2021-1-8 20:19:40 | 显示全部楼层
无扩展名?
 楼主| 发表于 2021-1-9 09:54:50 | 显示全部楼层
本帖最后由 LINGX 于 2021-1-9 10:45 编辑

感谢管理员亲自伸出援手!!
  1. C:\Windows\Temp>0000test
  2. *.009
  3. 系统找不到指定的文件。
  4. 已复制         0 个文件。
  5. *.008
  6. 系统找不到指定的文件。
  7. 已复制         0 个文件。
  8. *.007
  9. 系统找不到指定的文件。
  10. 已复制         0 个文件。
  11. *.006
  12. 系统找不到指定的文件。
  13. 已复制         0 个文件。
  14. *.005
  15. 系统找不到指定的文件。
  16. 已复制         0 个文件。
  17. *.004
  18. 系统找不到指定的文件。
  19. 已复制         0 个文件。
  20. xxx.003
  21. 已复制         1 个文件。
  22. xxx.002
  23. 已复制         1 个文件。
  24. xxx.001
  25. 已复制         1 个文件。
复制代码
源文件只有一个:
*.001

但是只能成功复制出一个文件…………

不对,这次运行复制出了3个文件!

多运行几次 就成功复制成功10个文件了!!

能否请管理员科普一下,以上各参数在此例中的具体作用?
 楼主| 发表于 2021-1-9 10:04:45 | 显示全部楼层
有没有办法 只运行一次 就能实现以上效果?
发表于 2021-1-9 10:36:08 | 显示全部楼层
那就升序试
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1001,1,1010) do (
  3.      set /a n=%%i,m=n+1
  4.      copy *.!n:~-3! *.!m:~-3! 2>nul
  5. )
  6. pause
复制代码
 楼主| 发表于 2021-1-9 10:48:16 | 显示全部楼层
那就升序试
terse 发表于 2021-1-9 10:36



厉害!!

成功了!!
 楼主| 发表于 2021-1-9 10:51:42 | 显示全部楼层
本帖最后由 LINGX 于 2021-1-9 11:39 编辑

接下来是新的问题:

如何实现 每复制到*.100就自动删除*.001至*.099,并且保留
*.100
*.200(复制到第200代时作更名操作,以此类推)
*.300
……
*.1000
 楼主| 发表于 2021-1-9 17:57:06 | 显示全部楼层
本帖最后由 LINGX 于 2021-1-11 22:22 编辑
  1. @echo off

  2. cls

  3. md output 2>nul

  4. set copycmd=n

  5. setlocal enabledelayedexpansion

  6. for /l %%i in (100001,1,100100) do (
  7.      set /a n=%%i, m=n+1, k=n*10
  8.      copy *.!n:~-5! *.!m:~-5!
  9.          if m equ k ( move /y *.!m:~-5! .\output\ ) else ( del /F *.!n:~-5! )
  10.          )
复制代码
我以上代码是以共复制100代文件为例,每隔10代删除。

不过我这样写,没成功

求教有空的高手指点一下
发表于 2021-1-10 19:32:09 | 显示全部楼层
我没有搞清楚你想要什么,如果升序,相当于把001,复制到100,有何用,如果降序相当于把99复制100,有必要吗
 楼主| 发表于 2021-1-10 19:47:12 | 显示全部楼层
本帖最后由 LINGX 于 2021-1-11 22:23 编辑

回楼上:

是为了做一个无聊的实验。。。

============================


已经基本解决问题了,准备关闭本主题,感恩!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 09:59 , Processed in 0.021075 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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