Board logo

标题: [文本处理] 如何用bat 处理1词一行改 4个词同一行并加入符号 [打印本页]

作者: idc878787    时间: 2022-2-25 20:13     标题: 如何用bat 处理1词一行改 4个词同一行并加入符号

本帖最后由 idc878787 于 2022-2-25 21:04 编辑

如何用bat 处理1词一行改 4个词同一行并加入符号


文本a.txt
aa
bb
cc
dd
ee
ff
gg
hh

生成新文本b.txt
aa,bb,cc,dd
ee,ff,gg,hh
作者: Fit    时间: 2022-2-25 21:25

@echo off&setlocal enabledelayedexpansion
set /a cout=0
(for /f "tokens=*" %%i in (a.txt) do (
        set /a cout+=1
        if not !cout! equ 4 (
                set /p=%%i,<nul
        ) else (set /a cout=0&echo,%%i)
))>b.txt

pause
作者: lixiaoxiao    时间: 2022-2-25 21:39

2楼的逻辑能理解,但对于语法不怎么明白, %%i,<nul  和 echo,%%i 是什么情况?
作者: Fit    时间: 2022-2-25 21:44

set /p=%%i,<nul   好像不换行输出
echo,%%i              换行输出
作者: qixiaobin0715    时间: 2022-2-26 09:46

本帖最后由 qixiaobin0715 于 2022-2-26 09:51 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in (a.txt) do (
  4.     set /a n+=1
  5.     set /a m=n%%4
  6.     set str!m!=%%a
  7.     if !m! equ 0 echo,!str1!,!str2!,!str3!,!str0!
  8. )
  9. pause
复制代码
总行数必须是4的倍数,否则行尾最后一组不会被显示。
作者: qixiaobin0715    时间: 2022-2-27 09:53

总行数不是4的倍数,最后一组也显示。可以这样:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%a in (a.txt) do (
  4.     set /a n+=1
  5.     set /a m=n%%4
  6.     set str!m!=%%a
  7.     if !m! equ 0 echo,!str1!,!str2!,!str3!,!str0!
  8. )
  9. if !m! neq 0 (
  10.     for /l %%i in (1,1,!m!) do (
  11.         set str=!str!!str%%i!,
  12.     )
  13.     echo,!str:~,-1!
  14. ))>aaa.txt
  15. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2