我有一个包含以下内容的文件:
1005
1010
1011
1012
1013
1014
1009
1015
1006
77
1016
1017
1018
1019
1020
1021
1022
1023
1008
我想将这些行读入一个数组,对它们进行排序并将包含 5 个元素的 block 写入一个新文件
输出文件应如下所示(每行五个元素。)
xyz 77,1005,1006,1008,1009
xyz 1010,1011,1012,1013,1014
...
我当前的批处理脚本如下所示:
@echo off &setlocal disabledelayedexpansion
Sort Knot_unsort.dat>Knot_sort.dat
set /A i=0
for /F "delims=" %%a in (Knot_sort.dat) do (
set /A i+=1
call set array[%%i%%]=%%a
)
call set n=%%i%%
for /L %%i in (1,1,%n%) do (
set /a b = %%i %% 5
if %b% == 0 (
:: does not work
)
call echo %%b%%
)
对内容进行排序并将行读入数组是可行的。但在那之后我不知道如何将五个元素连接到一个新变量中并将它们写回到一个新文件中。 我尝试使用模数,但 if 语句不起作用。
最佳答案
另一种更简单的方法,即不将行存储在变量中...
编辑:修复了小错误
@echo off
setlocal EnableDelayedExpansion
set "i=0"
<nul (for /F %%a in ('sort Knot_unsort.dat') do (
set /A "i=(i+1)%%5"
if !i! equ 1 (set /P "=xyz %%a") else set /P "=,%%a"
if !i! equ 0 echo/
))
if %i% neq 0 echo/
输出:
xyz 1005,1006,1007,1008,1009
xyz 1010,1011,1012,1013,1014
xyz 1015,1016,1017,1018,1019
xyz 1020,1021,1022,1023
编辑:管理可变位数的数字的新方法,最多 8 位
@echo off
setlocal EnableDelayedExpansion
set "i=0"
<NUL (
for /F "tokens=2 delims=/ " %%a in (
'(for /F %%i in (Knot_unsort.dat^) do @(set /A 100000000+%%i ^& echo /%%i^)^) ^| sort'
) do (
set /A "i=(i+1)%%5"
if !i! equ 1 (set /P "=xyz %%a") else set /P "=,%%a"
if !i! equ 0 echo/
)
)
if %i% neq 0 echo/
关于batch-file - 将文件读入数组并写出 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52878640/