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

[文本处理] 批处理怎样把文本的每一个字符转成单独行?

求大神帮忙,

把文本的每一个字符转成单独行

例,字符.txt

啊呵埃挨哎唉哀皑癌蔼矮艾碍爱隘
鞍氨安俺按暗岸胺案肮昂盎凹敖熬
翱袄傲奥懊澳芭捌扒叭吧笆八疤巴
拔靶把耙坝霸罢爸白柏百摆佰败拜
稗斑班搬扳般颁板版扮拌伴瓣半办
绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞
包褒剥薄雹保堡饱宝抱报暴豹鲍爆
杯碑悲卑北辈背贝钡倍狈备惫焙被

转换成

















……

每个文字都单独占一行

  1. @echo off
  2. rem 根据实际情况调整100数值
  3. for /f "delims=" %%i in ('type "字符.txt"') do (
  4. set "str=%%i"
  5. setlocal enabledelayedexpansion
  6. for /l %%l in (0,1,100) do (
  7. if not "!str:~%%l,1!" equ "" (
  8. >>字符2.txt echo,!str:~%%l,1!
  9. )
  10. )
  11. endlocal
  12. )
  13. pause
复制代码

这样行吗
bat小白,请多指教!谢谢!

TOP

回复 2# 77七


生成的是

瀛楃2.txt

文件内的内容:
%
i

TOP

回复 3# 398832385


   把批处理和文本都保存为ansi编码格式试试
bat小白,请多指教!谢谢!

TOP

本帖最后由 hfxiang 于 2023-2-26 19:51 编辑

回复 1# 398832385

  1. 啊呵埃挨哎唉哀皑癌蔼矮艾碍爱隘
  2. 鞍氨安俺按暗岸胺案肮昂盎凹敖熬
  3. 翱袄傲奥懊澳芭捌扒叭吧笆八疤巴
  4. 拔靶把耙坝霸罢爸白柏百摆佰败拜
  5. 稗斑班搬扳般颁板版扮拌伴瓣半办
  6. 绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞
  7. 包褒剥薄雹保堡饱宝抱报暴豹鲍爆
  8. 杯碑悲卑北辈背贝钡倍狈备惫焙被
复制代码
以ANSI编码板式保存为1.txt
下载gawk( http://bcn.bathome.net/tool/4.1.3/gawk.exe ),执行:
  1. gawk -vFS="" "{for(i=0;i++<NF;)print$i}" 1.txt>2.txt
复制代码
2.txt就是你想要的结果

TOP

本帖最后由 398832385 于 2023-2-26 19:03 编辑

回复 4# 77七


少了一些字~总共6,688个字,转出来有6270个字

TOP

回复 5# hfxiang


少了很多字~总共6,688个字,但是转出来只有5852个字
比如第一眼就看到少了最后一个字

TOP

回复 6# 398832385


   请提供一个执行后少字的样本,要不然我也不知道错在哪里
bat小白,请多指教!谢谢!

TOP

回复 7# 398832385


抱歉,把“i++”写成“++i”了,造成每行最后1个字给忽略了,已修正
  1. gawk -vFS="" "{for(i=0;i++<NF;)print$i}" 1.txt>2.txt
复制代码

TOP

TOP

回复 9# hfxiang


    为啥转出来是6270个字,但是我的原版里面是6688个字

TOP

回复 11# 398832385


    请把原始文件上传到网盘,我试试。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 12# Batcher


    链接:https://pan.baidu.com/s/1uLg_nxSNn3EzJlRgWosCGw?pwd=g43n
提取码:g43n

TOP

回复 13# 398832385


    15(字/行)X(418行)=6270(字),哪来 6688 字?

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "filename=字符.txt"
  4. set "outputfile=output.txt"
  5. if exist "%outputfile%" del "%outputfile%"
  6. for /f "usebackq delims=" %%a in ("%filename%") do (
  7.   set "line=%%a"
  8.   for /l %%i in (0,1,!strlen!) do (
  9.     set "char=!line:~%%i,1!"
  10.     echo !char!>>"%outputfile%"
  11.   )
  12. )
  13. echo "转换完成"
  14. exit /b
  15. :: 函数:获取字符串长度
  16. :setlen
  17. setlocal
  18. set "s=!%~1!"
  19. set "len=0"
  20. for /l %%i in (0,1,32767) do if not "!s:~%%i,1!"=="" set /a "len=%%i+1"
  21. endlocal & set "%~2=%len%"
  22. exit /b
复制代码
首先,定义了输入文件名为字符.txt和输出文件名为output.txt。接着,使用for循环逐行读取输入文件,对于每一行,获取其长度并逐个字符处理。内部使用了一个自定义函数setlen来获取字符串长度。在内部的循环中,使用字符串切片来逐个获取字符,并将每个字符写入输出文件output.txt的一行。最后输出"转换完成",并退出脚本。

注意:如果输入文件包含 UTF-8 编码的中文字符,需要将脚本文件保存为 UTF-8 编码,并在脚本文件开头添加chcp 65001以设置命令行窗口的字符编码。

TOP

返回列表