0

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

set filename=%filename:é=e%
set filename=%filename:è=e%

但它不起作用!

由于某种原因,DOS 不能正确理解这些字符中的任何一个。这是一个屏幕截图(请注意,CSV 中的输出不是代码的一部分。我只是将回显的内容发布到 .csv 中供您查看)。

(没有足够的声誉来发布截图......)(http://i.imgur.com/dIFeBJz.png

所以是的,我在程序、终端和输出文件中有不同的字符。现在我不知道如何处理带有重音的特殊字符。最佳选择是一行代码将它们全部从字符串中删除,无需替换。

就像是 :

 set filename=%filename:À à Ä ä Â â É é È è Ë ë Ê ê Ì ì Ï ï Î î Ò ò Ö ö Ô ô Ù ù Ü ü Û û=%

这只会杀死他们,我会在将输出拍摄到 .csv 文件之前输入这一行。可以解决问题,但我无法在 BATCH 中使用该功能(我已经看到 .NET 或其他语言的解决方案,但在 BATCH 中没有)

4

2 回答 2

1

Batch 可以正确管理任何 Ascii 字符,即代码低于或等于 255 的字符。这很明显,因为 Batch 代码本身也必须是用 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 以上的代码),则批处理程序无法解决此问题。

于 2013-08-14T17:55:41.240 回答
0

在您的批处理文件中使用它。

SETLOCAL EnableDelayedExpansion

@CHCP 65001 >NUL

而这个工作

set filename=%filename:é=e%

set filename=%filename:è=e%
于 2019-07-16T18:03:31.850 回答