BATCH:从文件名中更改特殊字符(éèà...)

时间:2013-08-14 14:44:50

标签: csv batch-file terminal special-characters dos

我正在尝试批量替换字符串中的特殊字符。我试过这个:

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中没有)

2 个答案:

答案 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%