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

[文件操作] 【已解决】批处理如何让变量每次循环增加10?

本帖最后由 思想之翼 于 2024-12-1 13:37 编辑

D:\KZ1\内有500个文本,名为1 2 3...500,欲1-10合并成1.txt,11-20合并成2.txt,21-30合并成3.txt ... 491-500合并成50.txt,变量如何设置?
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%g in (1,1,10) do (
  4. set r=%%g
  5. type D:\KZ1\!r!.txt >> D:\KZ2\1.txt
  6. )
  7. endlocal
  8. exit
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 aloha20200628 于 2024-12-2 14:17 编辑

回复 1# 思想之翼

如下代码可进一步提高4楼代码的效率》将写盘次数减少10倍
  1. @echo off & setlocal enabledelayedexpansion &set "kF=1" &cd /d "d:\kz1"
  2. for /l %%n in (1,1,500) do (
  3.    set/a "k=%%n%%10" &if !k! equ 0 (
  4.    type !lineF! %%n.txt>"d:\kz2\!kF!.txt"
  5.    set "lineF="&set/a "kF+=1"
  6.    ) else (set "lineF=!lineF! %%n.txt")
  7. ) 2>nul
  8. pause&exit/b
复制代码
1

评分人数

TOP

本帖最后由 qixiaobin0715 于 2024-12-2 16:54 编辑

这样可以不必限定文件个数:
  1. @echo off
  2. cd /d "D:\KZ1"
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /a-d *.txt^|findstr /be "[1-9][0-9]*\.txt"') do (
  5.     set /a "n=(%%~ni-1)/10+1"
  6.     type "%%i">>"D:\KZ2\!n!.txt"
  7. )
  8. pause
复制代码
需要注意的是,个别文件合并顺序可能会不一样。比如1-10这一组,合并顺序是1.txt,10.txt,2.txt-9.txt。


回复 1# 思想之翼
参考5楼的写法,这样效率要高一些:
  1. @echo off
  2. cd /d "D:\KZ1"
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /a-d *1.txt') do (
  5.     set n1=%%~ni
  6.     set "n=(n1-1)/10+1"
  7.     set /a n2=n1+9
  8.     (for /l %%j in (!n1!,1,!n2!) do (
  9.         if exist %%j.txt type %%j.txt
  10.     ))>"D:\KZ2\!n!.txt"
  11. )
  12. pause
复制代码
不必评分,能解决问题就好。
1

评分人数

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /L %%g in (1,1,50) do (
  4.     set /a n2 = %%g * 10, n1 = n2 - 9
  5.     (for /L %%i in (!n1!,1,!n2!) do (
  6.         type "D:\KZ1\%%i.txt"
  7.     )) > "D:\KZ2\%%g.txt"
  8. )
  9. pause
复制代码
1

评分人数

TOP

本帖最后由 aloha20200628 于 2024-12-1 10:24 编辑

回复 1# 思想之翼
  1. @echo off & setlocal enabledelayedexpansion &set "kF=1"
  2. for /l %%n in (1,1,500) do (
  3.     type "d:\kz1\%%n.txt">>"d:\kz2\!kF!.txt"
  4.     set/a "k=%%n%%10" &if !k! equ 0 set/a "kF+=1")
  5. pause&exit/b
复制代码
1

评分人数

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (1,1,500) do (
  4.     set /a "n=(%%i-1)/10+1"
  5.     type "D:\KZ1\%%i.txt" >> "D:\KZ2\!n!.txt"
  6. )
  7. pause
复制代码
1

评分人数

TOP

试试
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%g in (1,1,500) do (
  4. set @@cmd=!@@cmd! "?%%g.txt"
  5. set /a @@n+=1
  6. set /a @@m=!@@n!%%10
  7. if !@@m! == 0 (
  8. set /a @@c+=1
  9. echo type !@@cmd:?=D:\KZ1\! ^>"D:\KZ2\!@@c!.txt"
  10. type !@@cmd:?=D:\KZ1\! >"D:\KZ2\!@@c!.txt" 2>nul
  11. echo,&set "@@cmd="
  12. )
  13. )
  14. endlocal
  15. pause&exit/b
复制代码
1

评分人数

TOP

返回列表