【问题标题】:Batch file keeps adding special characters to file name?批处理文件不断在文件名中添加特殊字符?
【发布时间】:2015-01-12 09:36:30
【问题描述】:

这是我第一次在这里发帖,如果我发错地方了,我深表歉意。

我有一个批处理文件,它从文本文件中读取域列表,然后对它们执行 nslookup ls,将结果发布到它们自己的文本文件中。

直到最近我才遇到过这个问题,而且我这辈子都无法弄清楚为什么会发生这种情况。

除了第一个文件外,所有文件都完美无缺!第一个文件名总是以“∩╗┐”开头(不带引号) 这些文件被我编写的另一个程序读取,因此往往会导致问题。

这是创建文件的代码...

(
del /s /q "D:\Profile\Desktop\New_folder\Records\*.*"
for /f %%a in (D:\Profile\Desktop\New_folder\Domains\Domains.txt) do (
echo ls %%a >temp\tempfile.txt
echo exit >>temp\tempfile.txt
nslookup < temp\tempfile.txt > records\%%a.txt
)
)

非常感谢任何帮助。

干杯,

亚伦

【问题讨论】:

    标签: cmd ls nslookup


    【解决方案1】:

    根据IBM Extendend Characterset,您提到的字符具有十六进制代码EF BB BF,这是UTF-8 字节顺序标记(“BOM”),请参阅Wikipedia。这意味着文件 Domain.txt 似乎最近已使用带有 BOM 的 UTF-8 字符编码保存。

    为了摆脱字符,只需编辑文件并在没有 BOM 的情况下保存它。参见例如到How to make Notepad to save text in UTF-8 without BOM? 怎么做或者搜索“remove BOM”

    请注意,不带 BOM 的 UTF-8 与可打印的 ASCII 兼容,即编码为 UTF-8 的“普通”字符将在大多数常见字符集中正确显示,例如 IBM 扩展字符集。

    如果您不能或不想编辑输入文件,那么您可能会去掉批处理脚本中的前缀,请参阅 http://www.robvanderwoude.com/ntset.php#StrSubst 中的子字符串 - 最终类似于

    set BOM_REMOVED=false
    for ...
    set X=%%a
    if %BOM_REMOVED%==false set X=%X:~3%
    set BOM_REMOVED=true
    echo ls %X >temp\tempfile.txt
    ...
    

    【讨论】:

    • 嗨,半位,非常感谢您的回复。我相当有信心通过您的建议,我将能够解决这个问题。与此同时,由于这是一个更大项目的一部分,我一直在使用不同的代码来识别它并重命名它。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多