Как сохранить вывод из командной строки - PullRequest
4 голосов
/ 05 декабря 2011

Мне известен общий синтаксис для сохранения вывода в текстовом файле при выполнении в командной строке.

Но моя потребность в другом. Я хочу видеть это в окне командной строки и хочу сохранить его в текстовом файле. Обычно использование> c: \ dirlist.txt сохраняет в текстовый файл, но не отображается в окне командной строки.

Мне нужно увидеть в командной строке, а также сохранить в текстовом файле. Любая помощь

Ответы [ 3 ]

2 голосов
/ 06 декабря 2011

Во-первых, написать программу TEE.BAT относительно легко. Единственная проблема состоит в том, что команда set /p (используется для получения выходных данных команды) не различает конец файла и пустую строку. Это означает, что выходные данные будут записаны до первой пустой строки (или до конца файла):

@echo off
:: usage: AnyCommand | TEE filename
setlocal EnableDelayedExpansion
if exist %1 del %1
:nextLine
set line=:EOF
set /p line=
if "!line!" == ":EOF" goto :eof
echo(!line!
echo(!line!>> %1
goto nextLine

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

tee CopyOfFile.txt < File.txt

Однако , если этот пакетный файл используется так, как он был спроектирован, то время от времени происходит сбой:

type File.txt | tee CopyOfFile.txt

Предыдущая строка иногда работает нормально, а иногда показывает и хранит только первую строку файла. Я сделал несколько тестов и не могу выделить причину ошибки. Возможно, кто-то (Джеб?) Сможет объяснить, что происходит в этом случае, и дать решение.

1 голос
/ 05 декабря 2011

Требуется эквивалент программы tee для Windows. Если вы можете использовать PowerShell , то у вас уже есть то, что вам нужно . В противном случае, Google для реализации, которая работает в вашей системе.

В качестве альтернативы вы можете перенаправить вывод в файл и наблюдать этот файл с помощью средства просмотра журнала в реальном времени из другой командной строки (т. Е. Эквивалент tail).

0 голосов
/ 12 декабря 2011

Вы можете написать свою собственную тройку с пакетом, как у Aacini, но без недостатков.

@ECHO OFF
setlocal DisableDelayedExpansion
for /F "delims=" %%A in ('findstr /n "^" ') do (
  set "line=%%A"
  setlocal EnableDelayedExpansion
  set "line=!line:*:=!"
  (echo(!line!)
  (echo(!line!) > "%~1"
  endlocal
)

Первоначально идея от walid2me echo к экрану и файлу в одну строку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...