1

Скажем, у меня есть исполняемый файл, в который я хочу передать параметр из файла .bat . Подвох заключается в том, что в значении параметра должна быть newline .

Когда я попробую следующее:

"c:\folder\my app.exe" parameter="line1\nline2"

результат не интерпретируется как наличие новой строки между line1 и line2 .

Есть идеи как это сделать?

2 ответа2

1

Нет, не через сам пакетный файл. Но exe-файлы или другие программы могут передавать аргументы, содержащие новые строки, в другие exe-файлы.

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

runner "c:\folder\my app.exe" parameter="line1\nline2"

и он заменит \n истинным символом LF (здесь показано как ) и выполнит вызов, используя P/Invoke:

"c:\folder\my app.exe" parameter="line1↵line2"

Еще один способ преодолеть это ограничение - использовать PowerShell. Он имеет разный анализ командной строки.

0

Не может быть сделано

Аналогично тому, почему команда chown Unix использует двоеточие в качестве разделителя: chown предполагает, что имена пользователей заканчиваются двоеточиями. Аналогично, пакетные файлы имеют формат файла.

Формат файла командного файла предполагает, что символ новой строки заканчивает строку. Не существует поддерживаемой escape-последовательности. Итак, то, что вы просите, не может быть сделано.

Один из возможных обходных путей - это если программа распознает escape-последовательность, например, \n. (JScript, поддерживаемый как файлы .js, которые может использовать CScript, поддерживает команду unescape. WScript.Echo(unescape("%0d0a")); в % 0d0a")); )

Другой распространенный подход для решения этой проблемы заключается в том, что программа поддерживает поток данных, который может быть указанным именем файла или потоком "стандартного ввода". Символы / последовательности новой строки могут быть предоставлены программе таким образом.

Эти подходы используются несколькими программами. Я не буду напоминать ни о каком способе, чтобы пакетное игнорирование символа новой строки, ни о каком-либо другом стандартизированном способе пытаться кодировать этот символ таким образом, чтобы все / большинство программ распознавали символ (ы), на который вы пытаетесь ссылаться к.

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