|
|
发表于 2023-11-28 19:56:16
|
显示全部楼层
本帖最后由 aloha20200628 于 2023-11-28 20:00 编辑
先给一段纯P代码对应一楼示例的解法》
- @echo off
- ::定义中英文标点符号链表
- set "ps=,.;,。;"
- (for /f "tokens=1* delims=:" %%1 in ('findstr /n ".*" 原始有符号.txt') do (
- set "_s=%%2"
- if not defined _s (echo,) else (
- setlocal enabledelayedexpansion &set "endC=!_s:~-1!"
- for %%c in ("!endC!") do if "!ps!" neq "!ps:%%~c=!" (set "_s=!_s:~,-1!")
- echo,!_s!&endlocal
- )
- ))>"处理结果.txt"
- 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!=% 是无效的。
若上述有缺,请知者补全。
|
|