Простой пакетный файл не работает на Windows Server 2012

Простой пакетный файл не работает на Windows Server 2012

На сервере Windows 2012, войдя в систему как администратор (локальный и доменный), создал пакетный файл «test.bat», перенаправив ввод консоли в файл:

echo Hello

При запуске из командной строки PowerShell cmd в виде .\test.bat, выводится:

'■e' is not recognized as an internal or external command,

Пакетный файл находится в каталоге C:\users\%username% вошедшего в систему пользователя.

Файл был создан из консоли, таким образом:

echo "echo Hello" > test.bat

а затем отредактировал в Блокноте. В Блокноте выглядело нормально... ничего необычного.

Есть идеи, что происходит?

ОТРЕДАКТИРОВАНО:

По предложению я изменил ввод в командной строке, чтобы удалить кавычки. Поэтому ввел команду следующим образом: echo echo Yowzer > test.bat Ran as: .\test.batи получил тот же ответ, что и выше. Также обратите внимание, что если я отредактирую в блокноте указанный выше test.bat (т. е. созданный в строке cmd) и перезапущу, он все равно вернет мусорный ответ. Однако если я создам/сохраню файл в блокнотеот начала,работает правильно.

Может ли кто-нибудь это повторить?

решение1

Похоже, что перенаправление >закодировало ваш пакетный файл в unicode, когда он должен быть ascii. В Powershell используйте Out-Fileвместо перенаправления следующее:

"echo test" | Out-File test.bat -Encoding ascii

Запуск пакетного файла после следующей кодировки воспроизведет ошибку:

"echo test" | Out-File test.bat -Encoding unicode

решение2

У меня была та же проблема, я думал, что я сошел с ума.

Создайте свой пакетный файл на другом компьютере. У меня была та же проблема с открытием Блокнота и обычным вводом команд. Он всегда выдавал мне одно и то же сообщение. После того, как я заново создал пакетный файл (не копируйте старый файл) на моем локальном устройстве Win7, скопировал его обратно на мой сервер Win 2012R2, все заработало как надо.

решение3

У вас, скорее всего, где-то есть какой-то забавный персонаж. Я почти уверен, что если так, xxd -p blah.batто вы увидите несколько забавных персонажей в вашем пакетном файле.

Затем вы могли бы подумать, как они там оказались, и удалить их.. И это можно сделать с помощью xxd и sed. Или, возможно, другим способом, если вы знаете, какие это символы.

Вы можете получить xxd, загрузив VIM 7.X, или из cygwin

Или вы можете найти шестнадцатеричный редактор и поместить пакетный файл в него.

Вы говорите, что создаете пакетный файл из stdin.. Ну, вы могли бы уточнить, что именно вы имеете в виду, например, имеете ли вы в виду copy con blah.batCTRL-Z? Но что бы вы ни имели в виду, это помещает в файл какие-то странные символы.

добавлен

Я вижу, вы утверждаете, что сделали это с помощью echo и redirect.

Вы можете легко упростить это для устранения некоторых неполадок.

Пытаться type blah.bat

если там показан смешной персонаж, то попробуйте echo H>blah.batразвить его до того, что вы напечатали... и посмотрите, в какой момент вы получите смешного персонажа.

Еще одна вещь, с которой можно поэкспериментировать, — это кодирование входных и выходных данных.

попробуйте chcp. chcp 850 и chcp 65001 и посмотрите, увидите ли вы какие-либо различия. chcp изменит как входную, так и выходную кодировку, но chcp покажет вам только входную кодировку.

Если вы посмотрите мой ответ здесьhttps://stackoverflow.com/questions/30904504/font-is-right-why-cant-i-get-this-unicode-character-to-display-in-this-c-sharp/32418703#32418703 вы видите программу chcpa, которую я написал некоторое время назад, и вы можете использовать ее для изменения входных и выходных кодировок более гибко, чем chcp. Или вы можете просто использовать chcp, но если вы обнаружите, что chcp ограничивает вас в устранении неполадок, то вы можете попробовать chcpa.

Но одним из лучших инструментов для устранения неполадок здесь будет шестнадцатеричный редактор или xxd, как уже упоминалось. И попытка упростить вашу строку еще больше, как и предлагалось.

Такие шаги помогут вам изолировать, где находится ошибка. И комментируйте, когда вы что-то попробуете здесь или далее.

решение4

Echo не использует кавычки. Уберите двойные кавычки и все заработает.

echo echo hello > test.bat

Echo ищет строку после echo и пробела, кавычки разрывают строку.

Ещеэхо.

Связанный контент