batch-file - 将文件读入数组并写出 block

标签 batch-file cmd

我有一个包含以下内容的文件:

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/

相关文章:

batch-file - 如何在 Cmd 中回显大于号?

windows - 如何通过windows运行提示框执行cmd命令? (赢+R)

batch-file - Windows批处理文件: echo all files in a directory with a loop

batch-file - 如何在批处理文件中给出相对路径?

windows - 批处理文件删除早于 N 天的文件并将结果保存为文本文件

windows - @echo 在命令中关闭

batch-file - 一次启动多个脚本但仍然有输出

sqlite - 如何使用 sqlite3.exe 命令行工具自动化进程?

java - 无法从 Java Web 服务获取数据

windows - 如何通过cmd调用删除文件夹中的所有文件和文件夹