Печать результатов пакетного файла в текстовый файл - PullRequest
17 голосов
/ 13 октября 2011

Я создал простой командный файл для реорганизации набора файлов / папок. Работает как надо, но мне нужно распечатать результаты в лог-файл. Мне нужно вывести результаты каждого действия (создание каталога, перемещение файла, переименование / удаление файла). Когда я использую команду >> results.txt , все, что я могу получить - это «1 файл (ов) перемещен». тонну раз. Вот код:

FOR %%a IN (C:\scans\*.txt) DO CALL :read %%~na
TREE /f >> tree.txt
@GOTO :EOF

:read
@set FILE=%1
FOR /f "tokens=1,2" %%b IN (%FILE%.txt) DO CALL :makeDir %%b %%c
@GOTO :EOF

:makeDir
@set ACCOUNT=%1
@set CHECK=%2
mkdir %ACCOUNT%
CALL :move
@GOTO :EOF

:move
MOVE %FILE%.gif %ACCOUNT%
REN %ACCOUNT%\%FILE%.gif %CHECK%.gif
DEL %FILE%.txt
@GOTO :EOF

Как я могу печатать в файл журнала (results.txt) при каждом действии?

РЕДАКТИРОВАТЬ: новый код с эхом:

@echo off
FOR %%a IN (C:\scans\*.txt) DO CALL :read %%~na
TREE /f >> tree.txt
@GOTO :EOF

:read
@set FILE=%1
FOR /f "tokens=1,2" %%b IN (%FILE%.txt) DO CALL :makeDir %%b %%c
@GOTO :EOF

:makeDir
@set ACCOUNT=%1
@set CHECK=%2
mkdir %ACCOUNT%
@echo Made directory for %ACCOUNT% >> results.txt
CALL :move
@GOTO :EOF

:move
MOVE %FILE%.gif %ACCOUNT%
@echo %FILE% moved to %ACCOUNT%
REN %ACCOUNT%\%FILE%.gif %CHECK%.gif
@echo %ACCOUNT%\%FILE% renamed %CHECK% >> results.txt
DEL %FILE%.txt
@echo %FILE% deleted. >> results.txt
@GOTO :EOF

Ответы [ 6 ]

19 голосов
/ 11 апреля 2013

Вы можете добавить этот фрагмент кода в начало вашего пакетного файла:

@Echo off
SET LOGFILE=MyLogFile.log
call :Logit >> %LOGFILE% 
exit /b 0

:Logit
:: The rest of your code
:: ....

Он в основном перенаправляет вывод метода :Logit на LOGFILE. Команда exit предназначена для обеспечения выхода из пакета после выполнения :Logit.

15 голосов
/ 13 октября 2011

Нет ничего плохого в том, что вы перенаправляете стандартный файл в файл. Команды Move и mkdir ничего не выводят. Если вам действительно нужен журнал регистрации этих команд, вам нужно явно отобразить стандартный вывод, указывающий, что вы только что выполнили.

Пакетный файл, пример:

@ECHO OFF
cd bob
ECHO I just did this: cd bob

Запуск из командной строки:

myfile.bat >> out.txt

или

myfile.bat > out.txt
6 голосов
/ 02 октября 2013

Для результата печати в текстовый файл

мы можем следовать

echo "test data" > test.txt

Это создаст файл test.txt и записал «данные теста»

Если вы хотитедобавь потом

echo "test data" >> test.txt
3 голосов
/ 01 марта 2017

Шаг 1. Просто поместите весь необходимый код в файл «MAIN.BAT».

Шаг 2: Создайте другой файл bat, скажем MainCaller.bat, и просто скопируйте / вставьте эти 3 строки кода:

REM THE MAIN FILE WILL BE CALLED FROM HERE..........
CD "File_Path_Where_Main.bat_is_located"
MAIN.BAT > log.txt

Шаг 3: Просто дважды щелкните «MainCaller.bat».

Все выходные данные будут записаны в текстовый файл с именем «log».

3 голосов
/ 01 октября 2013

Для отображения результата пакетного файла в текстовом файле вы можете использовать

эту команду

chdir > test.txt

Эта команда перенаправит результат в test.txt.открыв test.txt вы найдете текущий путь к каталогу в test.txt

0 голосов
/ 01 марта 2017

Вы пытались переместить DEL% FILE% .txt% в после удаления @echo% FILE%.>> results.txt, чтобы это выглядело так?

@echo %FILE% deleted. >> results.txt
DEL %FILE%.txt
...