Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - сохранить копию вывода консольного окна в txt файл

Ответить
Настройки темы
CMD/BAT - сохранить копию вывода консольного окна в txt файл

Старожил


Сообщения: 268
Благодарности: 8

Профиль | Отправить PM | Цитировать


есть код
Код: Выделить весь код
for %%i in ("%CD%\*.txt") do ( copy "%%i" "%%~dpni_copy%%~xi" )
pause
консольное окно выдаёт:
Код: Выделить весь код
D:\>for %i in ("D:\*.txt") do (copy "%i" "%~dpni_copy%~xi" )

D:\>(copy "D:\111.txt" "D:\111_copy.txt" )
Скопировано файлов:         1.

D:\>(copy "D:\222.txt" "D:\222_copy.txt" )
Скопировано файлов:         1.

D:\>pause
Для продолжения нажмите любую клавишу . . .

как сохранить копию вывода консольного окна в txt файл ?
желательно с %date% %time% перед каждой строкой, но можно и без этого
вариант 1 не подходит, потому что в консольном окне перестаёт писать произведённые действия. (но сам лог файл нормальный, подходящий)
вариант 2 не подходит, потому что лог совсем не совпадает с окном, да еще и в самом окне не пишет "скопировано файлов 1"
вариант 1

Код: Выделить весь код
>"log.txt" (for %%i in ("%CD%\*.txt") do (copy "%%i" "%%~dpni_copy%%~xi"))
pause
выдаёт
окно
Код: Выделить весь код
D:\>(for %i in ("D:\*.txt") do (copy "%i" "%~dpni_copy%~xi" ) ) 1>"log.txt"

D:\>pause
Для продолжения нажмите любую клавишу . . .
txt
Код: Выделить весь код
D:\>(copy "D:\111.txt" "D:\111_copy.txt" ) 
Скопировано файлов:         1.

D:\>(copy "D:\222.txt" "D:\222_copy.txt" ) 
Скопировано файлов:         1.


вариант 2

Код: Выделить весь код
for %%i in ("%CD%\*.txt") do ( copy "%%i" "%%~dpni_copy%%~xi" > log.txt )
pause
выдаёт
окно
Код: Выделить весь код
D:\>for %i in ("D:\*.txt") do (copy "%i" "%~dpni_copy%~xi"  1>log.txt )

D:\>(copy "D:\111.txt" "D:\111_copy.txt"  1>log.txt )

D:\>(copy "D:\222.txt" "D:\222_copy.txt"  1>log.txt )

D:\>pause
Для продолжения нажмите любую клавишу . . .
txt
Код: Выделить весь код
Скопировано файлов:         1.

Отправлено: 11:51, 24-09-2019

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Вариант 3. Берёте tee.exe (например, из комплекта GnuWin32 CoreUtils for Windows) и пользуете. Скажем, такое:
Скрытый текст
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sLog=Log.log

if exist "%sLog%" del /f /q "%sLog%"

>nul chcp 1251
for %%i in ("%CD%\*.txt") do (
	copy "%%~i" "%%~dpni_copy%%~xi"
) |tee.exe -a "%sLog%"
pause |tee.exe -a "%sLog%"
>nul chcp 866

endlocal
exit /b 0
Конечно, такое себе…

Вариант 4. Пользуете PowerShell, в качестве tee.exe — командлет Tee-Object.

Цитата shadowbat:
вариант 2 не подходит, потому что лог совсем не совпадает с окном, »
Потому что этим кодом Вы на каждом очередном проходе цикла перезаписываете («> log.txt») лог-файл, созданный на предыдущем проходе цикла.


Кстати, я категорически не рекомендую проводить какие-либо манипуляции с именами файлов, над которыми производится цикл выборки «for». Дело в том, что выборка подходящих по маске файлов не делается сразу при входе, поиск очередного файла производится на каждом проходе (банальными FindFirstFile() на первом проходе и FindNextFile() на последующих). Посему при подобном коде на определённых наборах можно получить вовсе не то, что ожидалось (вплоть до бесконечного исполнения пакетного файла). Например, попробуйте исполнить приведённый Вами код на таком наборе файлов (на разделе с файловой системой NTFS):
Код: Выделить весь код
0001.txt
0001_b.txt
0002.txt
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:32, 24-09-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 268
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата Iska:
Потому что этим кодом Вы на каждом очередном проходе цикла перезаписываете («> log.txt») лог-файл, созданный на предыдущем проходе цикла. »
если использовать >> log.txt, то в принципе то же самое, не показывается откуда куда копировалось
Код: Выделить весь код
Скопировано файлов:         1.
Скопировано файлов:         1.
Скопировано файлов:         1.
Цитата:
выборка подходящих по маске файлов не делается сразу при входе, поиск очередного файла производится на каждом проходе
да, конечно нужно в другую папку копировать, он даже в этом примере копию только что созданного лог файла делает.

Отправлено: 13:18, 24-09-2019 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата shadowbat:
не показывается откуда куда копировалось »
Оно никогда не показывается. Не предусмотрено таковой возможности у внутренней команды copy.

Цитата shadowbat:
конечно нужно в другую папку копировать, »
Или делать разбор по for /f отбора по dir — вот тут будет целиком.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:54, 24-09-2019 | #4


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


shadowbat
Код: Выделить весь код
@echo off
set "d=C:\Papka"

pushd "%d%"
 for /f "delims=" %%a in ('dir /a-d/b "*.txt"') do set "ext=%%~xa"& call :# "%%a" "%%~na" "%%ext:.=%%"
popd
pause& exit

:#
 if not exist "%~2-%~3\%~2 %~3" md "%~2-%~3\%~2 %~3"
 >>log.txt (
  echo -------------------------------------
  echo %date%-%time%
  echo copy "%~1" "%~2-%~3\%~2 %~3"
  copy "%~1" "%~2-%~3\%~2 %~3"
  echo -------------------------------------
 )
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:04, 24-09-2019 | #5


Старожил


Сообщения: 268
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата alpap:
:# »

по подобию решения от alpap сделал код для первого сообщения:
Код: Выделить весь код
@for %%i in ("%CD%\*.txt") do ( call :# "%%i" "%%~dpni_copy%%~xi")
pause

:#
@>>"log.txt" (echo %date%-%time% copy "%~1" "%~2" & copy "%~1" "%~2")
@exit /b
окно консоли:
Код: Выделить весь код
D:\>(call :# "D:\111.txt" "D:\111_copy.txt" )

D:\>(call :# "D:\222.txt" "D:\222_copy.txt" )

D:\>pause
Для продолжения нажмите любую клавишу . . .
лог
Код: Выделить весь код
24.09.2019-15:45:29,35 copy "D:\111.txt" "D:\111_copy.txt" 
Скопировано файлов:         1.
24.09.2019-15:45:29,70 copy "D:\222.txt" "D:\222_copy.txt" 
Скопировано файлов:         1.
только, не пишет "Скопировано файлов: 1." в консоли
это максимум, который можно вытянуть из окна в данной ситуации?

Последний раз редактировалось shadowbat, 24-09-2019 в 17:08.


Отправлено: 15:49, 24-09-2019 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата shadowbat:
только, не пишет "Скопировано файлов: 1." в консоли »
Ну, так Вы же перенаправляете именно этот вывод с консоли в файл:
Цитата shadowbat:
Код: Выделить весь код
@>>"log.txt" (echo %date%-%time% copy "%~1" "%~2" & copy "%~1" "%~2")
»
Цитата shadowbat:
это максимум, который можно вытянуть из окна в данной ситуации? »
Окна консоли мы тут вообще не касаемся. Нет в пакетных файлах никакой возможности для того.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:43, 24-09-2019 | #7


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6646
Благодарности: 1539

Профиль | Отправить PM | Цитировать


shadowbat, используйте robocopy.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:52, 24-09-2019 | #8


Старожил


Сообщения: 268
Благодарности: 8

Профиль | Отправить PM | Цитировать


кривенький вариант на xcopy с костылями, тоже не идеально, пишет "Copied files: 1" даже если %errorlevel% <> 0 (например нет файла)
пока вердикт такой : штатными средствами нельзя отображать одно и то же в консоли и в логе файла, либо возможно с длиннющими костылями

код
Код: Выделить весь код
@for %%i in ("%CD%\*.txt") do ( call :# "%%i" "%%~dpni_copy%%~xi")
pause

:#
@>>"log.txt" (
@xcopy "%~1" "%~2"* /y
@if %errorlevel% EQU 0 (echo Copied files:       1.) else (echo Copied files:       0.)
@echo %date%-%time% xcopy "%~1" "%~2"* /y
)
@exit /b
окно консоли:
Код: Выделить весь код
D:\>(call :# "D:\111.txt" "222.txt" )

D:\>(call :# "D:\111.txt" "222.txt" )

D:\>pause
Для продолжения нажмите любую клавишу . . .
лог:
Код: Выделить весь код
D:\111.txt
Скопировано файлов: 1.
Copied files:       1.
24.09.2019-16:46:51,65 xcopy "D:\111.txt" "D:\222.txt"* /y
D:\222.txt
Скопировано файлов: 1.
Copied files:       1.
24.09.2019-16:46:51,67 xcopy "D:\111.txt" "D:\222.txt"* /y
Цитата DJ Mogarych:
shadowbat, используйте robocopy. »
с таким же успехом можно и свой cmd2 написать, с блекджеком

Последний раз редактировалось shadowbat, 24-09-2019 в 17:03.


Отправлено: 16:55, 24-09-2019 | #9


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:33, 24-09-2019 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - сохранить копию вывода консольного окна в txt файл

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Создать txt файл и сохранить его в папку в диске C black_night14@vk AutoIt 1 14-01-2018 12:08
Delphi - Получение вывода консольного приложения student_po Программирование и базы данных 1 26-01-2014 20:23
Разное - отключитьь скрытие консольного окна Bint Microsoft Windows 7 2 22-11-2010 15:18
Интерфейс - [решено] Редактирование папок диалогового окна Сохранить/Открыть файл (PlacesBar) Artya Microsoft Windows 2000/XP 15 03-11-2009 00:05
[решено] Как сохранить текст из окна в файл в нужном месте? Firebolt AutoIt 2 27-04-2009 15:57




 
Переход