找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23596|回复: 9

[文本处理] 【已解决】求助批处理 文本逗号分隔

[复制链接]
发表于 2023-9-24 13:57:32 | 显示全部楼层 |阅读模式
文本行中,原文件以多空格做分隔

00685     群加权P2  1120922      45.24     45.93     45.24     45.91      123   
00731     富时高息  1120922      65.20     65.55     65.20     65.55      516   

希望批处理, 实现用一个逗号分隔

00685,群加权P2,1120922,45.24,45.93,45.24,45.91,123   
00731,富时高息,1120922,65.20,65.55,65.20,65.55,516   

谢谢

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-9-24 14:46:16 | 显示全部楼层
你的123后面本来就是带空格还是你复制错了?
发表于 2023-9-24 14:48:10 | 显示全部楼层
本帖最后由 pd1 于 2023-9-24 14:54 编辑
  1. powershell -c "((gc .\1.txt) -replace '[ ]+(?=[\S])',',') -replace '[ ]+$',''>2.txt"
复制代码
发表于 2023-9-24 15:29:30 | 显示全部楼层
这不是直接得到结果的答案,但可以通过你自己修改来得到需要的结果
  1. @echo off
  2. del /q 2.txt>nul 2>nul
  3. echo 展示需要的列的位置,缺点只有26列。 源 1.txt 结果 2.txt
  4. echo 用法,根据结果明确每列对应的变量名称,复制下面源码,修改保留对应列,调整顺序,变更间隔符。
  5. echo 建议先取文件部分内容用于观察。
  6. pause
  7. for /f "tokens=1-26 delims= " %%a in (1.txt) do echo A%%a B%%b C%%c D%%d E%%e F%%f G%%g H%%h I%%i J%%j K%%k L%%l M%%m N%%n O%%o P%%p Q%%q R%%r S%%s T%%t U%%u V%%v W%%w X%%x Y%%y Z%%z>>2.txt
复制代码
 楼主| 发表于 2023-9-24 16:18:58 | 显示全部楼层
您好
123后面也有带空格
发表于 2023-9-24 17:17:24 | 显示全部楼层
  1. @echo off
  2. (for /f "useback delims=" %%a in (`find /n /v "" ^<"1.txt"`) do (
  3.         set "str=%%a "
  4.         setlocal enabledelayedexpansion
  5.         for /l %%l in (1,1,10) do (
  6.                 set "str=!str:  = !"
  7.         )
  8.         set "str=!str: =,!"
  9.         set "str=!str:~0,-1!"
  10.         echo=!str:*]=!
  11.         endlocal
  12. ))>"2.txt"
  13. pause
复制代码

评分

参与人数 2技术 +2 收起 理由
pd1 + 1 ``这个可以解释下怎么用吗
Batcher + 1 乐于助人

查看全部评分

发表于 2023-9-24 18:37:33 | 显示全部楼层
本帖最后由 aloha20200628 于 2023-9-24 18:54 编辑


简化纯P版》可直接利用空格是for/f...()的默认分隔符

  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in (源文件.txt) do (
  3.         set "_str=" &for %%b in (%%a) do (set "_str=!_str!,%%b")
  4.         echo,!_str:~1!
  5. ))>新文件.txt
  6. endlocal &exit/b
复制代码
发表于 2023-9-24 18:40:49 | 显示全部楼层
回复 1# KLL

用第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )方案如下:

  1. gawk -v"OFS=," "$1=$1" 1.txt>2.txt
复制代码
 楼主| 发表于 2023-9-24 19:06:55 | 显示全部楼层
运行已解决

感谢各位先进指导协助,谢谢
发表于 2023-9-24 22:45:16 | 显示全部楼层
回复 6# 77七


   参考[系列教程]批处理for语句从入门到精通[20101225更新]教程中的
(六)如何决定该使用 for /f 的哪种句式?(兼谈usebackq的使用)

评分

参与人数 1技术 +1 收起 理由
pd1 + 1 感谢分享

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 12:15 , Processed in 0.010359 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表