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

[文本处理] [已解决]文字txt内文字,批处理如何删除最尾的符号?

[复制链接]
发表于 2023-11-27 17:18:49 | 显示全部楼层 |阅读模式
如何bat批量删除最尾的符号?请帮忙,谢谢

评分

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

查看全部评分

发表于 2023-11-27 17:39:56 | 显示全部楼层
回复 1# skpkmon


    请选2个txt文件作为例子打包上传到网盘
 楼主| 发表于 2023-11-27 18:44:25 | 显示全部楼层
本帖最后由 skpkmon 于 2023-11-27 18:46 编辑

回复 2# ShowCode

https://vip.123pan.cn/1714872/%E5%88%86%E4%BA%AB/Desktop.rar
发表于 2023-11-27 19:49:07 | 显示全部楼层
powershell -noprofile executionpolicy bypass "(gc 'a.txt') -replace '(.+).$','$1'">b.txt
发表于 2023-11-28 10:13:01 | 显示全部楼层
回复 3# skpkmon

用第3方工具sed( http://bcn.bathome.net/tool/4.9/sed.exe )实现方法如下:
[code]
sed -r "/[ ,.;\t]+$/s///" 原始有符号.txt>删除符号.txt
[code]
发表于 2023-11-28 11:03:06 | 显示全部楼层
回复 1# skpkmon
  1. @echo off
  2. set "OldFile=1.txt"
  3. set "NewFile=2.txt"
  4. cd /d "%~dp0"
  5. powershell "(Get-Content '%OldFile%') -replace '[,.;!]+$'" >"%NewFile%"
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2023-11-28 11:21:18 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-11-28 14:44 编辑

如果还有别的符号可在第4行后面按照第4行的方式添加即可:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in (1.txt) do (
  4.     set "str1=%%i.........."
  5.     set "str1=!str1:,..........=.!"
  6.     for %%j in ("!str1!") do echo,%%~nj
  7. ))>2.txt
复制代码
注意:文本中不能存在“/\*?”之类的干扰符号。
发表于 2023-11-28 11:38:24 | 显示全部楼层
回复 7# qixiaobin0715


    误删 setlocal enabledelayedexpansion
发表于 2023-11-28 13:09:29 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. set _"."=1
  4. set _","=1
  5. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  6.         (for /f "tokens=1* delims=[]" %%a in ('find /n /v "" ^<"%%i"') do (
  7.                 set str=%%b
  8.                 setlocal enabledelayedexpansion
  9.                 if "!str!" equ "" (
  10.                         echo=
  11.                 ) else (
  12.                         set _str=!str:~-1!
  13.                         if defined _"!_str!" (
  14.                                 echo=!str:~0,-1!
  15.                         ) else (
  16.                                 echo !str!
  17.                         )
  18.                 )
  19.                 endlocal
  20.         ))>"%%~ni_2.txt"
  21. )
  22. pause
复制代码
 楼主| 发表于 2023-11-28 14:22:30 | 显示全部楼层
回复 6# ShowCode


成功了,谢谢你帮忙,这里是好地方,高手如云,再次多谢申出援手的师兄!
发表于 2023-11-28 14:45:07 | 显示全部楼层
回复 8# ShowCode
谢谢提醒,已修改。
发表于 2023-11-28 16:45:04 | 显示全部楼层
这样可能更通用一些:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in (1.txt) do (
  4.     set "str=%%i.........."
  5.     set "str=!str:,..........=!"
  6.     set "str=!str:...........=!"
  7.     set "str=!str:..........=!"
  8.     echo,!str!
  9. ))>2.txt
  10. pause
复制代码
存在“/\*?”也没问题。
发表于 2023-11-28 16:54:30 | 显示全部楼层
回复 12# qixiaobin0715


    原始文件里的空行被误删了
发表于 2023-11-28 19:56:16 | 显示全部楼层
本帖最后由 aloha20200628 于 2023-11-28 20:00 编辑


先给一段纯P代码对应一楼示例的解法》

  1. @echo off
  2. ::定义中英文标点符号链表
  3. set "ps=,.;,。;"
  4. (for /f "tokens=1* delims=:" %%1 in ('findstr /n ".*" 原始有符号.txt') do (
  5.         set "_s=%%2"
  6.         if not defined _s (echo,) else (
  7.                 setlocal enabledelayedexpansion &set "endC=!_s:~-1!"
  8.                 for %%c in ("!endC!") do if "!ps!" neq "!ps:%%~c=!" (set "_s=!_s:~,-1!")
  9.                 echo,!_s!&endlocal
  10.         )
  11. ))>"处理结果.txt"
  12. endlocal&exit/b
复制代码
借以上代码复习一遍多年老帖流传下来的三个纯P造码要点》
一。在 for 循环语句块内保全读入文本行中 ^&!%<\|/> 等特殊字符的关键,是安排变量延迟的开关位置,参考句式如下》
        for /f "delims=" %%a in (test.txt) do (
                set "s=%%a"
                setlocal enabledelayedexpansion
                ... 处理文本行变量 !s! ...
                endlocal
        )
        也许还有其他技法,请知者分享。
二。在 for 循环语句块内保留读入文件中的空行,其捷径是利用 findstr /n 功能,参考句式如下》
        for /f "tokens=1* delims=:" %%1 in (test.txt) do (
                set "s=%%2"
                if not defined s ( ...空行处理... ) else (
                        ...非空行处理...
                )
        )
        也许还有其他技法,请知者分享。
三。调用字符串截取和替换函数时,若内外层参数均为变量时须讲究变量类型,形象而言就是内层变量须为百分号变量(普通全局变量/循环变量/命令行变量),外层变量须是感叹号变量,例如》!lv:%gv%=!, !v:%%a=!, !v:%1=! 都是有效的。反之 %gv:!lv!=% 是无效的。
        若上述有缺,请知者补全。
发表于 2023-11-29 11:16:18 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-11-29 11:18 编辑

回复 14# aloha20200628
读入文本空行也可采取  “(for循环 + set /p)<被读入的文件”  的方式,稍复杂些,也算是回答了13楼ShowCode的提醒。以本帖为例:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims=:" %%i in ('find /c /v "" 1.txt') do set /a n=%%j
  4. (for /l %%i in (1,1,!n!) do (
  5.     set /p str=
  6.     if not defined str (
  7.         echo,
  8.     ) else (
  9.         set "str=!str!..........
  10.         set "str=!str:,..........=!"
  11.         set "str=!str:...........=!"
  12.         set "str=!str:..........=!"
  13.         echo,!str!
  14.         set str=
  15.     )
  16. ))<1.txt>2.txt
  17. pause
复制代码

评分

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

查看全部评分

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

本版积分规则

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

GMT+8, 2026-3-18 06:36 , Processed in 0.036726 second(s), 14 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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