|
|
发表于 2025-9-30 16:14:47
|
显示全部楼层
回复 20# dzwind
重新简化了删除行首字符的方法,新版代码如下(已在win7+系统测试通过),再试试吧
备注》代码第5行 "tokens=* delims= ? " 定义了行首被删除字符集,delims= 之后依序为中文空格、英文问号、制表符、英文空格。如有必要可用本地*.txt文件中的对应字符重新输入覆盖...
- @echo off &setlocal
- for /f "delims=" %%F in ('dir/s/b/a-d *.txt') do (
- (for /f "usebackq delims=" %%a in ("%%F") do set "x=%%a" &call echo,%%x:!=╫%%)>"#.$"
- setlocal enabledelayedexpansion &set/a "pm=1,qm=1"
- (for /f "tokens=* delims= ? " %%a in (#.$) do (
- set "s=%%a" &set "s=!s:......=……!" &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 (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" ) )>"$.#"
- endlocal
- (for /f "delims=" %%a in ($.#) do set "x=%%a" &call echo,%%x:╫=!%%)>"%%~F.new"
- )
- del /q #.$ $.# &pause&exit/b
复制代码 |
|