[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 如何用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

@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
Fit Strong

TOP

2楼的逻辑能理解,但对于语法不怎么明白, %%i,<nul  和 echo,%%i 是什么情况?

TOP

set /p=%%i,<nul   好像不换行输出
echo,%%i              换行输出
Fit Strong

TOP

本帖最后由 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的倍数,否则行尾最后一组不会被显示。

TOP

总行数不是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
复制代码

TOP

返回列表