标题: [文本处理] 再求批处理解决遇到--破折符号时,英文引号变为中文破折号。 [打印本页]
作者: dzwind 时间: 2024-3-12 08:58 标题: 再求批处理解决遇到--破折符号时,英文引号变为中文破折号。
本帖最后由 dzwind 于 2024-3-28 16:15 编辑
首先感谢前一段时间名叫"aloha20200628"的大师给写一段想要的语句,对于我的日常重复提供大量的帮助。
由于我没有看懂这位大师的写法,所以我想再添加语句,不知该如何下手。
再求加入把英文破折号改为中文破折号,比如将--改为中文——破折号。
@echo off &setlocal enabledelayedexpansion
set file=%1\*.txt
for /f "delims=" %%F in ('dir/s/b/a-d %file%') do (
set/a "pm=1,qm=1"
(for /f "usebackq delims=" %%a in ("%%~F") do (
set "s=%%a"&set "s=!s:......=……!"&set "_s=!s!"
set "t=%%a"&set "t=!t:--=——!"&set "_t=!t!" #这一句是我自己加的,但不起作用。
for %%n in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!_s:~%%n,1!" neq "" (set/a "ls+=%%n"&set "_s=!_s:~%%n!")
)
for /L %%n in (1,1,!ls!) do for %%c in (" ", " ", " ") do if "%%~c"=="!s:~,1!" (
set "s=!s:~1!"&set/a "ls-=1")
for /L %%n in (0,1,!ls!) do (
set "c=!s:~%%n,1!" & if ^!c! == ^" (
set/a "pm=0-!pm!" &if !pm! equ -1 (set "c=“") else (set "c=”")
) else if "!c!" == "'" (set/a "qm=0-!qm!" &if !qm! equ -1 (set "c=‘") else (set "c=’"))
set "_line=!_line!!c!"
)
echo,!_line!&set "_line="&set "ls=0"
))>"%%~F%date%.txt"
del "%%~F"
)
endlocal&exit/b
求大师帮助。谢谢
作者: aloha20200628 时间: 2024-3-12 11:50
本帖最后由 aloha20200628 于 2024-3-12 12:04 编辑
回复 1# dzwind
可在11-12行替换其他的中文双引号和中文单引号类型- @echo off &setlocal enabledelayedexpansion
- for /f "delims=" %%F in ('dir/s/b/a-d *.txt') do (
- set/a "pm=1,qm=1"
- (for /f "usebackq delims=" %%a in ("%%~F") do (
- set "s=%%a"&set "_s=%%a"
- for %%p in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
- if "!_s:~%%p,1!" neq "" (set/a "ls+=%%p"&set "_s=!_s:~%%p!")
- )
- for /L %%n in (0,1,!ls!) do (
- set "c=!s:~%%n,1!" & if ^!c! == ^" (
- set/a "pm=0-!pm!" &if !pm! equ -1 (set "c=“") else (set "c=”")
- ) else if "!c!" == "'" (set/a "qm=0-!qm!" &if !qm! equ -1 (set "c=‘") else (set "c=’"))
- set "_line=!_line!!c!"
- )
- echo,!_line!&set "_line="&set "ls=0"
- ))>"%%~F.new"
- )
- endlocal&exit/b
复制代码
作者: dzwind 时间: 2024-3-12 11:57
回复 2# aloha20200628
跪谢,我给大哥磕一个!
作者: dzwind 时间: 2024-3-12 14:49
本帖最后由 dzwind 于 2024-3-12 15:45 编辑
回复 dzwind
可在11-12行替换其他的中文双引号和中文单引号类型
aloha20200628 发表于 2024-3-12 11:50
再求2个要求:1、将英文省略号改为中文省略号。2、删除每个txt文件的每段开始的段首空格。
谢谢!
作者: aloha20200628 时间: 2024-3-12 21:11
回复 4# dzwind
在强力脚本中是现成工具,回到批处理脚本中很可能要自力更生...玩弄古刀老枪也成了一套日常的脑力操
如下代码说明》
第5行设置的6点英文省略号,其类型可调整
第9行设置了3种空白字符:英文空格/中文空格/制表符,可随需删减- @echo off &setlocal enabledelayedexpansion
- for /f "delims=" %%F in ('dir/s/b/a-d *.txt') do (
- set/a "pm=1,qm=1"
- (for /f "usebackq delims=" %%a in ("%%~F") do (
- set "s=%%a"&set "s=!s:......=…!"&set "_s=!s!"
- for %%n in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
- if "!_s:~%%n,1!" neq "" (set/a "ls+=%%n"&set "_s=!_s:~%%n!")
- )
- for /L %%n in (1,1,!ls!) do for %%c in (" ", " ", " ") do if "%%~c"=="!s:~,1!" (
- set "s=!s:~1!"&set/a "ls-=1")
- for /L %%n in (0,1,!ls!) do (
- set "c=!s:~%%n,1!" & if ^!c! == ^" (
- set/a "pm=0-!pm!" &if !pm! equ -1 (set "c=“") else (set "c=”")
- ) else if "!c!" == "'" (set/a "qm=0-!qm!" &if !qm! equ -1 (set "c=‘") else (set "c=’"))
- set "_line=!_line!!c!"
- )
- echo,!_line!&set "_line="&set "ls=0"
- ))>"%%~F.new"
- )
- endlocal&exit/b
复制代码
作者: dzwind 时间: 2024-3-12 21:17
本帖最后由 dzwind 于 2024-3-19 16:45 编辑
谢谢 aloha20200628 大师的帮助,此BAT已经帮助我解决了大部分的问题。
但也逐步发现一个问题,再求 aloha20200628 大师添加语句。
有的文章里英文引号很多,作者写错了引号,或者说引号少了反引号,这个现有的批处理无法根据词句的意思判断是否更改成正确方向的中文引号,所以能不能加上一个在英文变中文引号转化过程中,当遇到:时后面的英文引号更改为向右引的中文引号。
作者: dzwind 时间: 2024-3-19 16:46
回复 dzwind
在强力脚本中是现成工具,回到批处理脚本中很可能要自力更生...玩弄古刀老枪也成了一套日 ...
aloha20200628 发表于 2024-3-12 21:11
再求aloha20200628 大师的帮助,此BAT已经帮助我解决了大部分的问题。
但也逐步发现一个问题,再求 aloha20200628 大师添加语句。
有的文章里英文引号很多,有时作者写错了引号,有时句子中的少了反引号,这个现有的批处理无法根据词句的意思判断是否更改成正确方向的中文引号,
所以能不能加上一个在英文变中文引号转化过程中,当遇到:时后面的英文引号更改为向右引的中文引号。
作者: aloha20200628 时间: 2024-3-19 21:04
回复 7# dzwind
如很多低质小说网站经常出现这类恶心事,并非仅是引号左右错配,还加上左右引号根本不配对,整个弄得乱七八糟... 下载之后即使用专业编辑器也很难收拾利索。
以前提供的批处理脚本只能基于引号配对正确的前提,引号左右错配没问题,但不能配对错误,一个配对错误会导致其后全乱... 也许有人会拿此题叫ai试试...
作者: dzwind 时间: 2024-3-20 09:08
回复 dzwind
如很多低质小说网站经常出现这类恶心事,并非仅是引号左右错配,还加上左右引号根本不配对 ...
aloha20200628 发表于 2024-3-19 21:04
明白了,我手动修改吧。谢谢
作者: aloha20200628 时间: 2024-3-28 16:51
回复 1# dzwind
可在5楼代码中将第5行改为如下代码行即可,楼主以后若要替换其他符号亦可按此方法自己操练...- set "s=%%a"&set "s=!s:......=…!"&set "!s:--=——!"&set "_s=!s!"
复制代码
作者: dzwind 时间: 2024-3-28 17:13
谢谢大师的帮助!
作者: dzwind 时间: 2024-6-3 16:24
回复 dzwind
在强力脚本中是现成工具,回到批处理脚本中很可能要自力更生...玩弄古刀老枪也成了一套日 ...
aloha20200628 发表于 2024-3-12 21:11
请问达人?第9行如何添加删除文档开头的"?"符号?
我自己手动添加了,不管用。
for /L %%n in (1,1,!ls!) do for %%c in (" ", " ", " ","?") do if "%%~c"=="!s:~,1!" (
set "s=!s:~1!"&set/a "ls-=1")
作者: aloha20200628 时间: 2024-6-3 20:50
本帖最后由 aloha20200628 于 2024-6-3 20:57 编辑
回复 12# dzwind
删除文本行头部英文?字符不能直接加入5楼代码第9行,因为 for %%a in (...) 表达式中的?和*会被cmd视为通配符处理,故须改用别法解决...
新代码如下》其中第11行代码排列了文本行头部可能要被删除的多种字符,如中英文空格和制表符以及英文?字符...
- @echo off &setlocal enabledelayedexpansion
- for /f "delims=" %%F in ('dir/s/b/a-d *.txt') do (
- set/a "pm=1,qm=1"
- (for /f "usebackq delims=" %%a in ("%%~F") do (
- set "s=%%a"&set "s=!s:......=…!"&set "_s=!s!"
- for %%n in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
- if "!_s:~%%n,1!" neq "" (set/a "ls+=%%n"&set "_s=!_s:~%%n!")
- )
- for /L %%n in (1,1,!ls!) do (
- set "c=!s:~,1!" &set "x=0"
- if "!c!" neq " " if "!c!" neq " " if "!c!" neq " " if "!c!" neq "?" (set "x=1")
- if !x! equ 0 (set "s=!s:~1!"&set/a "ls-=1")
- )
- for /L %%n in (0,1,!ls!) do (
- set "c=!s:~%%n,1!" & if ^!c! == ^" (
- set/a "pm=0-!pm!" &if !pm! equ -1 (set "c=“") else (set "c=”")
- ) else if "!c!" == "'" (set/a "qm=0-!qm!" &if !qm! equ -1 (set "c=‘") else (set "c=’"))
- set "_line=!_line!!c!"
- )
- echo,!_line!&set "_line="&set "ls=0"
- ))>"%%~F.new"
- )
- endlocal&exit/b
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |