2015-01-12 4 views
0

Это первый раз, когда я отправил сюда, поэтому прошу прощения, если я не в том месте.Пакетный файл добавляет специальные символы в имя файла?

У меня есть пакетный файл, который читает список доменов из текстового файла, а затем делает nslookup ls против них, публикуя результаты в собственном текстовом файле.

У меня никогда не было проблемы с этим до недавнего времени, и я не могу, чтобы жизнь меня работала, почему это началось.

Все файлы идеальны, за исключением первого! Первое имя файла всегда выполняется с помощью «∩╗┐» (без кавычек). Эти файлы читаются другой программой, которую я написал, чтобы она вызывала проблему.

Heres код, который создает файлы ...

(
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

Согласно IBM Extendend Characterset символы вы упомянули имеют шестнадцатеричные коды EF BB BF который является UTF-8 порядок байт знака ("BOM"), см Wikipedia. Это означает, что файл Domain.txt, похоже, был недавно сохранен с использованием кодировки символов UTF-8 с помощью спецификации.

Чтобы избавиться от символов, просто отредактируйте файл и сохраните его без спецификации. См. до How to make Notepad to save text in UTF-8 without 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 
... 
+0

Hi halfbit, большое спасибо за ваш ответ. Я уверен, что с вашими предложениями я смогу это решить. Тем временем, поскольку это часть более крупного проекта, я использовал другой код, чтобы идентифицировать его и переименовать. Спасибо за вашу помощь. – Aaron