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

[文本处理] 再求批处理解决遇到--破折符号时,英文引号变为中文破折号。

[复制链接]
 楼主| 发表于 2025-9-29 21:04:18 | 显示全部楼层
回复 15# aloha20200628


    再次感谢您的无私帮助,让我的工作效率得到提升。
发表于 2025-9-29 21:16:24 | 显示全部楼层
回复 14# dzwind

订正了15代码中的第6行,补全楼主10楼的要求...
 楼主| 发表于 2025-9-30 08:57:40 | 显示全部楼层
回复  dzwind

因为需要全程开启变量延迟,所以文本行中包含的英文 ! 字符会被拦截,可用以下代码(修订 ...
aloha20200628 发表于 2025-9-29 20:15



脚本挺好,英文的感叹号被改成了中文感叹号,但是文本内容中的前面的空格没有被去掉,文本中的空格有1个全角空格的,有2个全角空格的,有1个半角空格的,有2个半角空格的,有3个半角空格的。能不能加语句把前面的空格都去掉?
发表于 2025-9-30 10:15:12 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-9-30 10:22 编辑

回复 18# dzwind

15楼代码已订正,其中第9-12行专用于删除行首指定字符并重计当前行长度,其中第11行定义每个要删除的字符,用多个 if "!c!" neq "X" 链接定义,被双引号包裹的 X 即为被删除字符。楼主可据此增减或核准需求...
 楼主| 发表于 2025-9-30 13:58:01 | 显示全部楼层
回复  dzwind

15楼代码已订正,其中第9-12行专用于删除行首指定字符并重计当前行长度,其中第11行定义每 ...
aloha20200628 发表于 2025-9-30 10:15



我的用bat的是XP系统,拖拽您给我的脚本后,英文字符包括英文感叹号变成了中文符号,但每个段的前面的空格没有被删除。 您提供的这一行好像没有发挥作用:   if "!c!" neq "  " if "!c!" neq "  " if "!c!" neq "  " if "!c!" neq "  " if "!c!" neq "?" (set "x=1")
发表于 2025-9-30 14:24:44 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-9-30 15:22 编辑

回复 20# dzwind

试试把15楼代码复制到你的文本编辑器中,再把3,11,24行的英文!字符和中英文空格字符,都用本地*.txt文件中的中英文空格和!字符重新输入覆盖...
发表于 2025-9-30 16:14:47 | 显示全部楼层
回复 20# dzwind

重新简化了删除行首字符的方法,新版代码如下(已在win7+系统测试通过),再试试吧
备注》代码第5行 "tokens=* delims= ?         " 定义了行首被删除字符集,delims= 之后依序为中文空格、英文问号、制表符、英文空格。如有必要可用本地*.txt文件中的对应字符重新输入覆盖...

  1. @echo off &setlocal
  2. for /f "delims=" %%F in ('dir/s/b/a-d *.txt') do (
  3.    (for /f "usebackq delims=" %%a in ("%%F") do set "x=%%a" &call echo,%%x:!=╫%%)>"#.$"
  4.    setlocal enabledelayedexpansion &set/a "pm=1,qm=1"
  5.    (for /f "tokens=* delims= ?         " %%a in (#.$) do (
  6.       set "s=%%a" &set "s=!s:......=……!" &set "s=!s:--=——!" &set "_s=!s!"
  7.       for %%n in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
  8.          if "!_s:~%%n,1!" neq "" (set/a "ls+=%%n" &set "_s=!_s:~%%n!") )
  9.       for /L %%n in (0,1,!ls!) do (
  10.          set "c=!s:~%%n,1!"
  11.          if ^!c! == ^" (
  12.              set/a "pm=0-!pm!"
  13.              if !pm! equ -1 (set "c=“") else (set "c=”")
  14.          ) else if "!c!" == "'" (
  15.              set/a "qm=0-!qm!"
  16.              if !qm! equ -1 (set "c=‘") else (set "c=’") )
  17.          set "_line=!_line!!c!" )
  18.       echo,!_line!&set "_line=" &set "ls=0" ) )>"$.#"
  19.    endlocal
  20.    (for /f "delims=" %%a in ($.#) do set "x=%%a" &call echo,%%x:╫=!%%)>"%%~F.new"
  21. )
  22. del /q #.$ $.# &pause&exit/b
复制代码
 楼主| 发表于 2025-9-30 19:54:16 | 显示全部楼层
本帖最后由 dzwind 于 2025-9-30 21:07 编辑

回复 22# aloha20200628


    感谢您的无私帮助,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:05 , Processed in 0.019379 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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