标题: [文件操作] 【已解决】批处理如何让变量每次循环增加10? [打印本页]
作者: 思想之翼 时间: 4 天前 00:59 标题: 【已解决】批处理如何让变量每次循环增加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,变量如何设置?- @echo off
- setlocal enabledelayedexpansion
- for /l %%g in (1,1,10) do (
- set r=%%g
- type D:\KZ1\!r!.txt >> D:\KZ2\1.txt
- )
- endlocal
- exit
复制代码
作者: Five66 时间: 4 天前 05:30
试试- @echo off
- setlocal enabledelayedexpansion
- for /l %%g in (1,1,500) do (
- set @@cmd=!@@cmd! "?%%g.txt"
- set /a @@n+=1
- set /a @@m=!@@n!%%10
- if !@@m! == 0 (
- set /a @@c+=1
- echo type !@@cmd:?=D:\KZ1\! ^>"D:\KZ2\!@@c!.txt"
- type !@@cmd:?=D:\KZ1\! >"D:\KZ2\!@@c!.txt" 2>nul
- echo,&set "@@cmd="
- )
- )
- endlocal
- pause&exit/b
复制代码
作者: qixiaobin0715 时间: 4 天前 08:38
- @echo off
- setlocal enabledelayedexpansion
- for /l %%i in (1,1,500) do (
- set /a "n=(%%i-1)/10+1"
- type "D:\KZ1\%%i.txt" >> "D:\KZ2\!n!.txt"
- )
- pause
复制代码
作者: aloha20200628 时间: 4 天前 10:22
本帖最后由 aloha20200628 于 2024-12-1 10:24 编辑
回复 1# 思想之翼 - @echo off & setlocal enabledelayedexpansion &set "kF=1"
- for /l %%n in (1,1,500) do (
- type "d:\kz1\%%n.txt">>"d:\kz2\!kF!.txt"
- set/a "k=%%n%%10" &if !k! equ 0 set/a "kF+=1")
- pause&exit/b
复制代码
作者: WHY 时间: 4 天前 22:06
- @echo off
- setlocal enabledelayedexpansion
- for /L %%g in (1,1,50) do (
- set /a n2 = %%g * 10, n1 = n2 - 9
- (for /L %%i in (!n1!,1,!n2!) do (
- type "D:\KZ1\%%i.txt"
- )) > "D:\KZ2\%%g.txt"
- )
- pause
复制代码
作者: qixiaobin0715 时间: 3 天前 08:35
本帖最后由 qixiaobin0715 于 2024-12-2 16:54 编辑
这样可以不必限定文件个数:- @echo off
- cd /d "D:\KZ1"
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d *.txt^|findstr /be "[1-9][0-9]*\.txt"') do (
- set /a "n=(%%~ni-1)/10+1"
- type "%%i">>"D:\KZ2\!n!.txt"
- )
- pause
复制代码
需要注意的是,个别文件合并顺序可能会不一样。比如1-10这一组,合并顺序是1.txt,10.txt,2.txt-9.txt。
回复 1# 思想之翼
参考5楼的写法,这样效率要高一些:- @echo off
- cd /d "D:\KZ1"
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /a-d *1.txt') do (
- set n1=%%~ni
- set "n=(n1-1)/10+1"
- set /a n2=n1+9
- (for /l %%j in (!n1!,1,!n2!) do (
- if exist %%j.txt type %%j.txt
- ))>"D:\KZ2\!n!.txt"
- )
- pause
复制代码
不必评分,能解决问题就好。
作者: aloha20200628 时间: 3 天前 14:13
本帖最后由 aloha20200628 于 2024-12-2 14:17 编辑
回复 1# 思想之翼
如下代码可进一步提高4楼代码的效率》将写盘次数减少10倍- @echo off & setlocal enabledelayedexpansion &set "kF=1" &cd /d "d:\kz1"
- for /l %%n in (1,1,500) do (
- set/a "k=%%n%%10" &if !k! equ 0 (
- type !lineF! %%n.txt>"d:\kz2\!kF!.txt"
- set "lineF="&set/a "kF+=1"
- ) else (set "lineF=!lineF! %%n.txt")
- ) 2>nul
- pause&exit/b
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |