У своєму запитанні ви згадуєте:
"... він поставить вихід у файл, але насправді не виконає його. У моєму випадку мені потрібно його виконати, а потім увійти у файл для подальшого посилання."
Оскільки ви кажете, що програма запущена, і її результат вводиться у файл, я подумав, що ви могли мати на увазі "відображається" , а не "виконується" .
Якщо це не те, що ви мали на увазі, то, можливо, це допомогло б, якби це було пояснено краще, можливо, з деяким результатом вибірки.
У будь-якому випадку, я публікую цю відповідь, якщо є інші, хто вважає це питання / відповіді корисним.
Таким чином, в основному це здається, що ви хочете, щоб вихід сценарію був захоплений у файл, а також мати можливість бачити вихід сценарію на екрані під час запуску сценарію.
(tl; dr версія: використовуйте wintee , наприклад:
script 2>&1 | wtee logfile.txt
)
Для цієї публікації я буду використовувати невеликий тестовий пакетний файл, але ваш сценарій може бути таким же великим і складним або настільки ж простим, як вам потрібно:
C:\>type a.cmd
@echo off
echo Command: "dir /b a*"
dir /b a*
echo.
echo Command: "dir /b non-existant-file"
dir /b non-existant-file
echo.
Ось що відбувається, коли я запускаю цей пакетний сценарій:
C:\>a.cmd
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
Зауважте, що в тестовому сценарії перше виконання команди "dir" є успішним, а друге - невдалим. Я роблю це лише для того, щоб показати, що буде з "повідомленнями про помилки" під час запуску сценарію.
Якщо я запускаю скрипт і використовую перенаправлення ( ">" ) для отримання виводу, я це побачу
C:\>a.cmd > log.txt
File Not Found
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
C:\>
Зверніть увагу, що повідомлення про помилку "Файл не знайдено" було показано на екрані під час запуску сценарію, і його фактично не було захоплено у файл. Це тому, що ">" фіксує "нормальний вихід", який був надісланий потоку STDOUT. "Повідомлення про помилки" зазвичай надсилаються до потоку STDERR.
Щоб захопити "нормальний вихід" та "повідомлення про помилки", вам також потрібно захопити потік STDERR, який вказується символом "2" в команді "2> & 1" тут:
C:\>a.cmd > log.txt 2>&1
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
У unix є стандартна команда: "tee"
Використовуючи команду "tee", ви можете одночасно захоплювати вихід з програми, а також відображати вихід на екран.
Команда "tee" не є стандартною для Windows, але ви можете завантажити безкоштовну версію "tee" для Windows тут:
wintee . Завантажена програма називається: "wtee.exe"
.
Ви використовуєте програму "wtee.exe", як показано нижче.
Це дозволить зафіксувати вихід скрипта у файл, названий "log.txt"
як і раніше, а також відобразить вихід на екрані під час запуску сценарію:
C:\>a.cmd 2>&1 | wtee log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found