Board logo

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

作者: LINGX    时间: 2021-1-8 15:57     标题: 【已解决】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
作者: Batcher    时间: 2021-1-8 17:59

回复 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
作者: qixiaobin0715    时间: 2021-1-8 20:19

无扩展名?
作者: LINGX    时间: 2021-1-9 09:54

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

能否请管理员科普一下,以上各参数在此例中的具体作用?
作者: LINGX    时间: 2021-1-9 10:04

有没有办法 只运行一次 就能实现以上效果?
作者: terse    时间: 2021-1-9 10:36

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

作者: LINGX    时间: 2021-1-9 10:48

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



厉害!!

成功了!!
作者: LINGX    时间: 2021-1-9 10:51

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

接下来是新的问题:

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

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

不过我这样写,没成功

求教有空的高手指点一下
作者: lifei259    时间: 2021-1-10 19:32

我没有搞清楚你想要什么,如果升序,相当于把001,复制到100,有何用,如果降序相当于把99复制100,有必要吗
作者: LINGX    时间: 2021-1-10 19:47

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

回楼上:

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

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


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




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2