批处理文件不断添加特殊字符到文件名?

时间:2015-01-12 09:36:30

标签: cmd ls nslookup

这是我第一次在这里发帖,所以如果我在错误的地方,我道歉。

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

非常感谢任何帮助。

干杯,

亚伦

1 个答案:

答案 0 :(得分:1)

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

为了摆脱这些字符,只需编辑文件并在没有BOM的情况下保存。参见例如至How to make Notepad to save text in UTF-8 without BOM?如何操作或搜索&#34;删除BOM&#34;

请注意,没有BOM的UTF-8与可打印的ASCII兼容,即&#34; normal&#34;编码为UTF-8的字符将在大多数常见字符集中正确显示,例如IBM Extended Characterset。

如果您不能或不想编辑输入文件,那么您可能会删除批处理脚本中的前缀,请参阅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
...