Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   LOG выполнения BAT файла не полон, не пойму как решить. Помогите пожалуйста (http://forum.oszone.net/showthread.php?t=334025)

sashaneo 28-03-2018 14:56 2805974

LOG выполнения BAT файла не полон, не пойму как решить. Помогите пожалуйста
 
Есть файл BAT, который удаляет файлы по указанную дату (в данном случае - удаляет все что старше 2-х дней).

Код файла BAT

Код:

@echo off
echo Start Delete_Files_For_Older_2_Days %time%

forfiles /p "C:\88" /s /m *.* /D -2 /C "cmd /c del @path"

echo Stop Delete_Files_For_Older_2_Days %time%

LOG создается и дописывается в один файл доп. командой в планировщике >>C:\LOG\%date%_Delete_Files_For_Older_2_Days.log

Результат выполнения записывается в LOG файл вот так -

Start Delete_Files_For_Older_2_Days 14:47:51,02

Stop Delete_Files_For_Older_2_Days 14:47:51,26

Помогите пожалуйста, сделать так, чтобы выводилось в LOG хотя бы так -

Start Delete_Files_For_Older_2_Days 14:47:51,02
Удален файл - С:\88\FileTest.txt
Stop Delete_Files_For_Older_2_Days 14:47:51,26

Так, как это расписывает скрипт "полного удаления в указанной папке".

*Еще если можно, помогите решить вопрос с этим же скриптом - не удаляет ПАПКИ (вложенные например если имеются в целевой папке), а только файлы.

Заранее спасибо за помощь!

DJ Mogarych 28-03-2018 22:56 2806052

Можно воспользоваться robocopy, чтобы переместить старые файлы в другую папку и записать эти файлы в лог, а затем просто удалить эту папку с перемещёнными файлами.

sashaneo 29-03-2018 16:02 2806129

А вывести таким способом как я описал в теме не возможно?

Казбек 29-03-2018 18:28 2806152

sashaneo,

Код:

"cmd /c del /q @path && echo @path>>logfile.log"
Следующая команда так же будет писать неудачные удаления:
Код:

"cmd /c del /q @path && echo @path>>logfile.log || echo @path>>logfile.err"

megaloman 29-03-2018 19:39 2806160

Громоздко, но работает. И пустые папки убивает.
Лог файл создаётся. Дата в системе должна отображаться дд.мм.гггг
Код:

@Echo Off
Set "DelFile=Z:\Box_In\*.*"
Set /A DeltaDay=-2
Set "LogFile=Z:\Box_Out\%Date:~6,4%%Date:~3,2%%Date:~0,2%_DelFile.log"

Call :FromDate %DeltaDay% %Date% "yyyymmdd"

>>"%LogFile%" (
Echo +++ %Date% %Time% Start Delete Files For Older %DeltaDay% Days

FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%DelFile%" /S /B /A:-D /O:D /T:W`) DO Call :DateDelFile "%%f" "%%~tf" "%yyyymmdd%"

Call :DelEmpty "%DelFile%"
Echo === %Date% %Time% Stop Delete Files For Older %DeltaDay% Days
)
GoTo :Eof

:DateDelFile
        Set "DateFile=%~2"
        Set /A DateFile=%DateFile:~6,4%%DateFile:~3,2%%DateFile:~0,2%
        If %DateFile% GEQ %~3 GoTo :Eof
        Del %1 2>&1 &&Echo --- Deleted %DateFile% %1
GoTo :Eof

:DelEmpty
        For /F "Tokens=*" %%A In ('2^>nul Dir "%~dp1" /B /S /A:D ^|Sort /R') Do RD "%%A" 2>nul &&Echo --- Empty Folder Deleted "%%A"
GoTo :Eof

:FromDate
  rem Пересчет даты на заданное кол-во дней
  rem В первом аргументе +- дни
  rem Во втором аргументе дата в формате dd.mm.yyyy
  rem В третем аргументе имя переменной в кавычках где получим новую дату в формате yyyymmdd

  rem Заимствовано http://forum.oszone.net/thread-186889.html
  rem вызов Call :FromNow %DeltaDay% %Date% "yyyymmdd"
  rem результат в перемменной %yyyymmdd%
        SetLocal
        Set "DT=%~2"
        Set yyyy=%DT:~-4%& set /a mm=100%DT:~3,2%%%100& set /a dd=100%DT:~,2%%%100
        Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
        Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
        Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
        Set /A J=J+2-12*L,I=100*(N-49)+I+L
        Set /A yyyy=I,mm=100+J,dd=100+K
        EndLocal& Set "%~3=%yyyy%%mm:~-2%%dd:~-2%"
GoTo :Eof


sashaneo 11-04-2018 11:50 2808263

Спасибо большое за помощь!

Опиум 13-04-2018 11:33 2808653

Цитата:

Цитата DJ Mogarych
Можно воспользоваться robocopy, »

ИМХО самое стройное решение.


Время: 19:38.

Время: 19:38.
© OSzone.net 2001-