Вопрос

Я хочу завернуть Однострочный язык Perl в пакетном файле.Для (тривиального) примера, в оболочке Unix, я мог бы заключить в кавычки команду, подобную этой:

perl -e 'print localtime() . "\n"'

Но DOS заглушает это полезным сообщением об ошибке:

Не удается найти строковый ограничитель "'" нигде перед EOF at -e в строке 1.

Каков наилучший способ сделать это в рамках файл .bat?

Это было полезно?

Решение

Для работы с Perl в Windows я стараюсь как можно чаще использовать обобщенное цитирование, чтобы у меня не возникло синдрома наклоняющейся зубочистки.Я сохраняю цитаты для тех материалов, которые нужны DOS:

perl -e "print scalar localtime() . qq(\n)"

Если вам просто нужен перевод строки в конце печати, вы можете позволить -l переключатель сделает это за тебя:

perl -le "print scalar localtime()"

О других интересных вещах, которые вы можете сделать с помощью переключателей, смотрите В perlrun ( перлран ) Документация.

Другие советы

В "командной строке DOS" Windows (cmd.exe) вам нужно использовать двойные, а не одинарные кавычки.Для внутри приведенного кода Perl Perl предоставляет вам множество опций.Три из них являются:

perl -e "print localtime() . qq(\n)"
perl -e "print localtime() . $/"
perl -le "print ''.localtime()"

Если у вас есть Perl 5.10 или новее:

perl -E "say scalar localtime()"

Благодаря Дж.Ф.Себастьянкомментарий автора.

Для обычных пакетных файлов в Windows NT + символ ^ скрывает множество вещей (<>|&), но для кавычек их удвоение творит чудеса:

C:\>perl -e "print localtime() . ""\n"""
Thu Oct  2 09:17:32 2008

Во-первых, любой ответ, который вы получите на этот вопрос, зависит от конкретной команды, потому что оболочка DOS не анализирует командную строку, как это делает uniq;он передает всю нераспределенную строку команде, которая выполняет любое разделение.Тем не менее, при использовании /subsystem:console среда выполнения C обеспечивает разделение перед вызовом main(), и большинство команд используют это.

Если приложение использует такое разделение, вы вводите буквальные двойные кавычки, удваивая их.Так бы вы поступили

perl -e "print localtime() . ""\n"""

В DOS вы используете "" вокруг своей команды Perl.Оболочка DOS не использует одинарные кавычки, как обычная оболочка Unix:

perl -e "print localtime();"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top