本帖最后由 CrLf 于 2012-3-2 17:49 编辑
回复 17# lllsoslll
前不久写过将空格替换为几乎任意字符的高兼容性方案:- @echo off
- set str=bbs.bathome.net=abc=123=ABC=@#$=test========
- rem 设置源字符串
-
- set 要替换的字符=[#]
- set "空="
- set "k= "
- set "t= " ;此处引号内的内容为 t=tab制表符
- rem 初始化设置
-
- setlocal enabledelayedexpansion
- set str=!str:"=""!
- rem 将引号倍增,迫使所有字符均在引号对之外
-
- for %%a in (^^ ^& ^| ^( ^) ^< ^> ";" ",") do set "str=!str:%%~a=^^^%%~a!"
- rem 替换特殊字符
-
- endlocal&set "str=%str:!=^^!%"
- rem 关闭变量延迟,同时保留 str 变量
-
- set "str=%str: =!t!%" ;此处引号内的内容为 str:tab制表符=!t!
- rem 分别替换制表符为变量 !t!
- for /f "delims=" %%a in (""%str: =!k!%"") do set str=%%~a
- rem 核心语句,替换空格为变量 !k! 后,利用等号在 for 中是分隔符的性质使其被预处理为空格
-
- setlocal enabledelayedexpansion
- set "str=!str: =%要替换的字符%!"
- rem 完成替换
-
- set "str=!空!%str%"
- rem 完成 !k!=空格、!t!=tab制表符 以及 ^ 的消隐,!空! 变量是用于在 %str% 不含 ! 号时触发二次转义
-
- set str=!str:""="!
- rem 引号减半,还原现场
-
- echo !str!
- rem 输出结果
-
- pause
复制代码 但是因为在 powerbat 的方案中,除了 = 与 ! 之外所有字符都被处理成 asc 了,所以可以这样:- @echo off&setlocal enalbedelayedexpansion
- rem 运行环境
-
- rem [[[[[此行代表 powerbat 的方案实现代码]]]]]
-
- endlocal&set str=%str:!=33 %
- rem 关闭变量延迟,替换感叹号
-
- set str=%str: =space%
- rem 替换空格为 space
-
- for /f "delims=" %%a in (""%str%"") do set "str=%%~a"
- rem 替换等号为空格
- set str=%str: =32 %
- rem 替换空格(原来是等号)为 32
-
- set str=%str:space= %
- rem 替换 space 为空格
-
- echo %str%
- pause
复制代码
|