返回列表 发帖

[文件操作] 【已解决】批处理如何让变量每次循环增加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
exitCOPY
1

评分人数

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

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

评分人数

TOP

本帖最后由 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"
)
pauseCOPY
需要注意的是,个别文件合并顺序可能会不一样。比如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"
)
pauseCOPY
不必评分,能解决问题就好。
1

评分人数

TOP

@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"
)
pauseCOPY
1

评分人数

TOP

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

评分人数

TOP

@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"
)
pauseCOPY
1

评分人数

TOP

试试
@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/bCOPY
1

评分人数

TOP

返回列表