|
|
发表于 2023-11-28 14:15:47
|
显示全部楼层
本帖最后由 aloha20200628 于 2023-11-28 14:25 编辑
一楼示例中没有那些 ^&!%()<\|/> 等特殊字符作祟,故15楼的纯P代码可以应付,当然 jscript/python/sed 等解决方案可以对此无惧。
若真要考虑纯P解法能处理上述特殊字符,还须订正其中的代码(包括字符串长度获取函数)如下》
按一楼示例原意顺便改写一个包含特殊字符的测试样本 test.txt:
'~^&!%(#将被删除#)<\|/>
'~^&!%()<\|/>#将被删除#
#将被删除#'~^&!%()<\|/>
- @echo off
- for /f "delims=" %%F in ('dir/b/s/a-d *.txt') do (
- (for /f "usebackq delims=" %%s in ("%%~F") do (
- set s=%%~s
- setlocal enabledelayedexpansion
- set "cut=-1" &set "_s=" &(call :_strLen s sL)
- for /L %%i in (0,1,!sL!) do (
- set "c=!s:~%%i,1!"
- if "!c!" neq "#" (if !cut! equ -1 set "_s=!_s!!c!") else (set/a "cut=0-!cut!")
- )
- (echo,!_s!)
- endlocal
- ))>"%%~F.new"
- )
- endlocal &exit/b
- :_strLen //获取字符串长度(须先开启变量延迟可保全^!等特殊字符) %1=被测字符串变量名 %2=返回值变量名
- set "_str=_!%~1!" &set "Len=0"
- for %%n in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
- if "!_str:~%%n,1!" neq "" (set/a "Len+=%%n"&set "_str=!_str:~%%n!")
- )
- set/a "%~2=!Len!-1" &exit/b
复制代码 |
|