0

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

我有一个批处理文件,它从文本文件中读取域列表,然后对它们执行 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
)
)

任何帮助深表感谢。

干杯,

亚伦

4

1 回答 1

1

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

为了摆脱字符,只需编辑文件并在没有 BOM 的情况下保存它。参见例如如何使记事本在没有 BOM 的情况下以 UTF-8 保存文本?如何做到这一点或搜索“删除 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
...
于 2015-01-12T10:52:08.443 回答