for 无法直接解析 unicode 文本,碰到含有 nul 字符的行是会直接结束解析的。所以为了不错漏,在文件格式不确定的情况下是必须转换的,而此处用的 type 是唯一一个能将 unicode 转为 ansi 的内部命令,只要不写成 for /f ... in ('type') do,其实效率并不低。
而替换特殊字符其实就是
for %%a in (\ / : ? ^" ^< ^> ^|) do set str=!str:%%a=!
复制代码
但是因为 * 无法直接替换,所以其实最方便的应该是写成(为简化表达,不考虑对感叹号的兼容性):
set "str=***test\测<试>"
set tmp=
for /l %%a in (1 1 10) do (
for /f tokens^=1*delims^=\/:*?^<^>^|^" %%b in ("!str!") do (