Пакетные файлы с переносом строк без переноса слов

#windows #batch-file #windows-xp

#Windows #пакетный файл #windows-xp

Вопрос:

В пакетных файлах Windows возврат каретки можно выполнить с помощью мягкого прерывания автоматического переноса слов в команде view программы Editor. Когда я использую жесткий разрыв с помощью клавиши возврата и мягкого разрыва, автоматический перенос слов отключен, не запланирован или отмечен, путь к файлу или имя_файла не проверяется через командную строку CMD.

Например:

 type C:"Dokumente und Einstellungen"Textdokument.txt
  

возвращает выходные данные из текстового файла.

 type C:"Dokumente und Einstellungen"
Textdokument.txt
  

завернутый с помощью клавиши возврата, не возвращает результат.
Та же команда с именем файла

 type C:"Dokumente und Einstellungen"
Textdokument.txt
  

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

Когда перенос слов снова отключен, я могу использовать символ каретки ^ для разрыва строки вместо использования автоматического разрыва строки, мягкого разрыва, который является включенной командой переноса слов.

 type C:"Dokumente und Einstellungen"^
Textdokument.txt
  

возвращает выходные данные из текстового файла, даже если автоматический
перенос строки, перенос слов был отключен во время
написания ТЕКСТА.

С for /F помощью команды и "usebackq" параметра s из-за двойных кавычек, которые я должен использовать для своего жесткого диска в формате NTFS, ТЕКСТ в командной строке

 for /F "usebackq" %%A in ("C:Dokumente und EinstellungenTextdokument.txt") do echo %%A
  

который повторяет текстовый файл.

Также можно разорвать строку с переносом слов. Это возвращает результат.

И, как и в случае с командой type, когда перенос слов отключен, из текстового файла с прерывистой строкой в пути к файлу нет возвращаемого вывода.

Я пытался использовать символ ^ с кареткой также с командой for / F, и невозможно разорвать строку, например, с помощью пути в командной строке типа, таким образом, чтобы команда возвращала вывод из текстового файла.

Мой вопрос в том, есть ли способ получить эхо-вывод с for /F помощью команды, когда имя пути разбивается на каретку или аналогичный символ вместо использования переноса слов?

Я использую Windows XP для работы с пакетными файлами.

Пожелания Стефану 🙂

Ответ №1:

Сначала я должен упомянуть, что подобная цитата type C:"Dokumente und Einstellungen"Textdokument.txt — ужасная плохая привычка; вы всегда должны заключать в кавычки весь путь, подобный type "C:Dokumente und EinstellungenTextdokument.txt" .

Курсор ^ не распознается как escape-символ, когда он появляется в части, заключенной в кавычки, поэтому это не может работать:

 for /F "usebackq" %%A in ("C:Dokumente und Einstellungen^
Textdokument.txt") do echo %%A
  

Но вы могли бы избежать кавычек, тогда это сработало бы:

 for /F "usebackq" %%A in (^"C:Dokumente und Einstellungen^
Textdokument.txt^") do echo %%A
  

Однако экранированные кавычки, конечно, открывают путь к анализатору без кавычек, поэтому вам нужно знать о том, что это может вызвать проблемы с некоторыми специальными символами, такими как amp; , ( , ) , ^ .

Более того, приведенная выше командная строка фактически экранирует первый символ T второй строки. Здесь это не проблема, поскольку T в этом нет ничего особенного, но могут возникнуть проблемные ситуации.

Вы не должны размещать SPACEsперед ^ или в начале следующей строки, потому что тогда они обрабатываются как часть указанного пути.

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

 for /F "usebackq" %%A in (
    "C:Dokumente und EinstellungenTextdokument.txt"
) do echo %%A
  

Комментарии:

1. Мое согласие может заключаться в том, чтобы использовать путь в скобках для удобства чтения со вторым переводом строки, который можно изменить на: абстрактная переменная переменные среды или списки параметров. Точка зрения заключается в том, что экранирование — это запрос на читаемость строки. Я знаю, что вредные привычки могут привести к ошибочным информационным ссылкам. Держаться подальше от служб удаленного управления, которые я использую, не является привычкой.

Ответ №2:

Как и вы, я обнаружил, что:

 for /F "usebackq" %%A in ("C:Usersmyusername" ^
   "foo.txt") do echo %%A
  

Не работает. Однако обходным путем может быть:

 SET MYDIR = "c:Usersmyusername"

for /F "usebackq" %%A in (%MYDIR% ^
   "foo.txt") do echo %%A
  

Это работает для меня.

Комментарии:

1. С пробелами, которые должны быть указаны, между MYDIR =

2. и ^ «foo.txt «, здесь пробел должен быть пробелом табуляции.

3. Я должен посмотреть с другой точки зрения, мой вопрос все еще не решен. «foo.txt » может быть просмотрен только в домашнем пути или домашнем файле %MYDIR% не имеет никакого эффекта. Разрыв строки возможен только из-за скобок, используемых в командной строке for /F. Вместо этого я мог бы также написать без символа каретки для /F «usebackq» %%A в (%ХАХА% «Textdokument.txt «) делать echo %%A