[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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

回复 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
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

无扩展名?

TOP

本帖最后由 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个文件了!!

能否请管理员科普一下,以上各参数在此例中的具体作用?

TOP

有没有办法 只运行一次 就能实现以上效果?

TOP

那就升序试
  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
复制代码

TOP

那就升序试
terse 发表于 2021-1-9 10:36



厉害!!

成功了!!

TOP

本帖最后由 LINGX 于 2021-1-9 11:39 编辑

接下来是新的问题:

如何实现 每复制到*.100就自动删除*.001至*.099,并且保留
*.100
*.200(复制到第200代时作更名操作,以此类推)
*.300
……
*.1000

TOP

本帖最后由 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代删除。

不过我这样写,没成功

求教有空的高手指点一下

TOP

我没有搞清楚你想要什么,如果升序,相当于把001,复制到100,有何用,如果降序相当于把99复制100,有必要吗
智慧是,利用最简单的代码替代复杂事情的处理过程。
付款请扫头像二维码码,谢谢

TOP

本帖最后由 LINGX 于 2021-1-11 22:23 编辑

回楼上:

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

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


已经基本解决问题了,准备关闭本主题,感恩!

TOP

返回列表