#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