|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - сохранить копию вывода консольного окна в txt файл |
|
|
CMD/BAT - сохранить копию вывода консольного окна в txt файл
|
Старожил Сообщения: 268 |
есть код
консольное окно выдаёт:
как сохранить копию вывода консольного окна в txt файл ? желательно с %date% %time% перед каждой строкой, но можно и без этого вариант 1 не подходит, потому что в консольном окне перестаёт писать произведённые действия. (но сам лог файл нормальный, подходящий) вариант 2 не подходит, потому что лог совсем не совпадает с окном, да еще и в самом окне не пишет "скопировано файлов 1" вариант 1
выдаёт окно D:\>(for %i in ("D:\*.txt") do (copy "%i" "%~dpni_copy%~xi" ) ) 1>"log.txt" D:\>pause Для продолжения нажмите любую клавишу . . . вариант 2
выдаёт окно 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 Для продолжения нажмите любую клавишу . . . |
|
Отправлено: 11:51, 24-09-2019 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Вариант 3. Берёте tee.exe (например, из комплекта GnuWin32 CoreUtils for Windows) и пользуете. Скажем, такое:
Скрытый текст
![]() Вариант 4. Пользуете PowerShell, в качестве tee.exe — командлет Tee-Object. Цитата shadowbat:
Кстати, я категорически не рекомендую проводить какие-либо манипуляции с именами файлов, над которыми производится цикл выборки «for». Дело в том, что выборка подходящих по маске файлов не делается сразу при входе, поиск очередного файла производится на каждом проходе (банальными FindFirstFile() на первом проходе и FindNextFile() на последующих). Посему при подобном коде на определённых наборах можно получить вовсе не то, что ожидалось (вплоть до бесконечного исполнения пакетного файла). Например, попробуйте исполнить приведённый Вами код на таком наборе файлов (на разделе с файловой системой NTFS): |
|
Отправлено: 12:32, 24-09-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 268
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата:
|
||
Отправлено: 13:18, 24-09-2019 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 13:54, 24-09-2019 | #4 |
Ветеран Сообщения: 1274
|
Профиль | Отправить 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
|
Профиль | Отправить 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. это максимум, который можно вытянуть из окна в данной ситуации? |
|
Последний раз редактировалось shadowbat, 24-09-2019 в 17:08. Отправлено: 15:49, 24-09-2019 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата shadowbat:
Цитата shadowbat:
Цитата shadowbat:
|
|||
Отправлено: 16:43, 24-09-2019 | #7 |
fascinating rhythm Сообщения: 6646
|
Профиль | Отправить PM | Цитировать shadowbat, используйте robocopy.
|
------- Отправлено: 16:52, 24-09-2019 | #8 |
Старожил Сообщения: 268
|
Профиль | Отправить 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, 24-09-2019 в 17:03. Отправлено: 16:55, 24-09-2019 | #9 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата shadowbat:
|
|
Отправлено: 17:33, 24-09-2019 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Создать 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 |
|