Простой наивный способ, который является медленным, потому что он открывает и позиционирует указатель файла на конец файла несколько раз.
@echo off
command1 >output.txt
command2 >>output.txt
...
commandN >>output.txt
Лучший способ - проще писать и быстрее, потому что файл открывается и позиционируется только один раз.
@echo off
>output.txt (
command1
command2
...
commandN
)
Еще один хороший и быстрый способ, который открывает и позиционирует файл только один раз
@echo off
call :sub >output.txt
exit /b
:sub
command1
command2
...
commandN
Изменить 2020-04-17
Время от времени вы можете захотеть повторно записать два или более файлов. Вам также могут понадобиться разные сообщения на экране. По-прежнему можно сделать это эффективно, перенаправив на неопределенные дескрипторы вне блока или подпрограммы в скобках, а затем используя &
нотацию для ссылки на уже открытые файлы.
call :sub 9>File1.txt 8>File2.txt
exit /b
:sub
echo Screen message 1
>&9 File 1 message 1
>&8 File 2 message 1
echo Screen message 2
>&9 File 1 message 2
>&8 File 2 message 2
exit /b
Я решил использовать дескрипторы 9 и 8 в обратном порядке, потому что этот способ с большей вероятностью позволит избежать потенциального постоянного перенаправления из-за ошибки проектирования реализации перенаправления Microsoft при выполнении нескольких перенаправлений для одной и той же команды. Это маловероятно, но даже такой подход может выявить ошибку, если вы достаточно постараетесь. Если вы сделаете перенаправление, вы гарантированно избежите проблемы.
3>File1.txt ( 4>File2.txt call :sub)
exit /b
:sub
etc.
%~f0
всегда дает полный путь к пакетному сценарию, даже если находится внутри подпрограммы CALLed :.>output.txt 2>&1
cmd /?
илиhelp cmd
из командной строки консоли для документации. Уловка третьего метода заключается в том, что перенаправление на CALL применяется ко всем командам в подпрограмме CALLed.если вы хотите перенаправлять как исходящие, так и ошибочные потоки
источник
>>
будет добавляться вa.txt
.a.txt
Вместо этого для перезаписи используйте>
. stackoverflow.com/q/4458231/1098302Я знаю, что это более старый пост, но кто-то наткнется на него в поиске Google, и также похоже, что некоторые вопросы, заданные OP в комментариях, не были конкретно рассмотрены. Кроме того, будьте осторожны со мной, так как это мой первый ответ, опубликованный на SO. :)
Чтобы перенаправить вывод в файл с использованием динамически сгенерированного имени файла, мой подход (читай: быстро и грязно) - это второе решение, предлагаемое @dbenham. Так, например, это:
Создаст файл, подобный тому, что вы видите на этом снимке экрана файла в целевом каталоге.
Это будет содержать этот вывод:
Также имейте в виду, что это решение зависит от локали, поэтому будьте осторожны, как и когда вы его используете.
источник
или
должен заполнить счет.
Если вы хотите получить
APPEND
результат, используйте>>
вместо>
.>
запустит новый файл журнала.источник
источник
Есть небольшая классная программа, которую вы можете использовать для перенаправления вывода в файл и консоль.
Показать фрагмент кода
источник
Добавьте эти две строки в верхнюю часть вашего командного файла, все stdout и stderr после будут перенаправлены в log.txt:
источник
Я использовал приведенную выше команду в своем командном файле, и она работает. В файле журнала он показывает результаты моей команды.
источник
Это может не сработать в случае "токсичных" символов во вводе. Рассмотрение ввода, подобного этому, IsAnIn ^^^^ put - хороший способ понять, что происходит. Конечно, существует правило, согласно которому входная строка ДОЛЖНА быть внутри двойных кавычек, но я чувствую, что это правило является действительным правилом только в том случае, если значение входных данных находится в разделе NTFS (возможно, это правило для URL-адресов, которые я Я не уверен). Но это, конечно, не правило для произвольной входной строки (это «хорошая практика», но вы не можете рассчитывать по ней).
источник
Добавление следующих строк в нижнюю часть вашего командного файла захватит все, как показано в окне CMD, и экспортирует в текстовый файл:
Он в основном выполняет выделение всего -> копирование в буфер обмена -> вставку в текстовый файл .
источник