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

echo Hello

При запуске из командной строки PowerShell от имени .\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 как:. .\test.bat и получил тот же ответ, что и выше. Также обратите внимание, что если я отредактирую в Блокноте вышеупомянутый test.bat (т. Е. Созданный в строке cmd) и перезапущу, он все равно вернет ответ «мусор». Однако, если я создаю / сохраняю файл в Блокноте с самого начала, он работает правильно.

Кто-нибудь может продублировать это?

4 ответа4

1

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

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

1

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

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

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

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

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

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

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

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

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

добавленной

Я вижу, вы заявляете, что вы сделали это с эхо и перенаправления ..

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

Попробуйте 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, как уже упоминалось. И пытаюсь упростить вашу линию еще дальше, как это предлагается.

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

-1

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

echo echo hello > test.bat

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

Больше на эхо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .