无法使批处理从字符串中删除奇怪的双引号字符

3
在我们公司,他们将SAP数据导出到文本文件中。有时,来自SAP的用户会输入双引号字符为”而不是"。在导出时,这个字符在notepad++和批处理回显中显示出奇怪的效果。我想在运行批处理文件进行分析时删除这个字符。然而,我不知道如何做。
你可以在这里找到一个样本文本文件: https://1drv.ms/t/s!At4HWeqiFYNvh-d-1vpV9cLWvsXQug 我正在使用的代码是:
@echo off
setlocal EnableDelayedExpansion
Set FileLocation=C:\desktop\test.txt
FOR /f "delims=" %%a IN ('findstr /I "ABC" %FileLocation%%') DO (
    Set FileLine=%%a
    echo !FileLine!
    Set RemoveChar=!FileLine:”=!
    Set RemoveChar=!RemoveChar:ö=!
    Echo !RemoveChar!
)

Thank you in advance!


你必须启用延迟扩展。https://ss64.com/nt/delayedexpansion.html - Squashman
我回顾了你之前的批处理文件问题,其中一些答案显示启用了延迟扩展。 - Squashman
抱歉...我忘记添加头代码了。我已经启用了elayedexexpansion。我编辑了原帖。我认为问题与使用的字符有关。 - Wajo357
有人能帮我吗?谢谢! - Wajo357
这被称为智能引号。您需要使用正确的编码,否则该字符可能无效并被替换为“?”。 - phuclv
1个回答

1
晚回答了,但我找到了解决方案。

通过更改代码页,Notepad++和命令提示符都可以正确处理文本字符串。

首先,将批处理文件保存为UTF-8编码。可以在编码菜单中选择“UTF-8”来完成此操作。

第二步,在脚本开头添加chcp 65001。这允许命令处理器以UTF-8格式查看字符。


这是修复后的代码:

@echo off

CHCP 65001

setlocal EnableDelayedExpansion
Set FileLocation=C:\desktop\test.txt
FOR /f "delims=" %%a IN ('findstr /I "ABC" %FileLocation%%') DO (
    Set FileLine=%%a
    echo !FileLine!
    Set RemoveChar=!FileLine:”=!
    Set RemoveChar=!RemoveChar:ö=!
    Echo !RemoveChar!
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接