我正在尝试批量替换字符串中的特殊字符。我试过这个:
set filename=%filename:é=e%
set filename=%filename:è=e%
但它不起作用!
由于某些原因,DOS无法正确理解这些字符。这是一个截图 (请注意,OUTPUT IN CSV不是代码的一部分。我只是将回显的内容发布到.csv中,仅供您查看。)
(没有足够的声望来发布截图...) (http://i.imgur.com/dIFeBJz.png)
所以是的,我在程序,终端和输出文件中都有不同的字符。现在我不知道如何处理带重音的特殊字符。 Optimal是一行代码,可以从字符串中删除所有代码,无需替换。
类似的东西:
set filename=%filename:À à Ä ä Â â É é È è Ë ë Ê ê Ì ì Ï ï Î î Ò ò Ö ö Ô ô Ù ù Ü ü Û û=%
那只会将它们全部杀死,我会在将输出输入.csv文件之前输入这一行。可以解决问题,但我无法在BATCH中获得该功能(我已经看过.NET或其他语言的解决方案,但在BATCH中没有)
答案 0 :(得分:0)
批处理可以正确管理任何Ascii字符,即代码低于或等于255的字符。这很明显,因为批处理代码本身也必须用Ascii编写。
@echo off
set remove=áéíóúÜü
set string=Aaá Eeé Iií Ooó UuÜüú It Works!
for /F "tokens=1-26 delims=%remove%" %%a in ("%string%") do (
set newString=%%a%%b%%c%%d%%e%%f%%g%%h%%i%%j%%k%%l%%m%%n%%o%%p%%q%%r%%s%%t%%u%%v%%w%%x%%y%%z
)
echo "%newString%"
输出:
"Aa Ee Ii Oo Uu It Works!"
如果您要删除的字符不 Ascii(代码高于255),则批处理程序无法解决此问题。
答案 1 :(得分:0)
在批处理文件中使用它。
SETLOCAL EnableDelayedExpansion
@CHCP 65001 >NUL
这有效
set filename=%filename:é=e%
set filename=%filename:è=e%