К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

OFF. Помогите допилить батник.

0 - 26.12.2011 - 14:23
Когда я его только садился писать, то создал тему на "Разработка программ", но меня сразу "послали" сюда.
Батник я собрал, работает, смысл его:
1. После запуска в папке 053 создаётся папка с текущей датой.
2. С флешки копируются данные в эту папку.
3. Файлы с флехи удаляются.
4. Если "возраст" папки > 5 дней, то эта папка удаляется.
5. Флешка извлекается.

Вся проблема в п. 4.
Если папка с датой в корневике диска, то проблем нет, но вот в самой папке 053, то ничего естественно не удаляется.
Подскажите, пожалуйста, что нужно дописать?

@echo off
SetLocal EnableDelayedExpansion

set SRC=W:Adr
set DST=V:053

call :FromNow -7
xcopy /q/y "%SRC%\*" "%DST%\%DATE:~,5%.%DATE:~-2%\"
for /d %%i in (%DST%\*) do (
set $i=%%~ni& set "$i=!$i:~-2!!$i:~3,2!!$i:~,2!"
if !$i! lss %yymmdd% rd /s/q "%%i"
)

Erase /S /Q W:\Adr

call USB_Disk_Eject.exe /REMOVETHIS /SHOWEJECT

:FromNow
SetLocal
Set yyyy=%DATE:~-4%& set /a mm=100%DATE:~3,2%%%100& set /a dd=100%DATE:~,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 yymmdd=%yyyy:~-2%%mm:~-2%%dd:~-2%
Exit /B



1 - 26.12.2011 - 14:55
Что то подсказывает, что проблем в SetLocal
14 строка...
Гость
2 - 26.12.2011 - 15:26
Я что-то не догнал, зачем такая сложность в FromNow.
Нельзя там что-то попроще, например:
strDate = Datepart("yyyy",Date()) & right("0"&Datepart("m",Date()),2) & right("0"&Datepart("d",Date()),2) ?
Гость
3 - 26.12.2011 - 15:28
Ааа, сорри, догнал, это ж батник, а не vbscript :)
Гость
4 - 26.12.2011 - 16:25
4-Flukostat >Второй вопрос - почему нельзя использовать wsh? :-)
Гость
5 - 26.12.2011 - 17:23
Походу я их не различаю, для меня что wscript, что cscript, одна малина, только w он еще, вроде, окошки диалоговые выводит. А так - хз, оба обрабатывают vbs-файлы :)
Гость
6 - 26.12.2011 - 17:24
PS Автор, а ведь, походу, на скриптах задача решается быстро и дешево. в отличие от батника :)
Гость
7 - 26.12.2011 - 18:06
расшифровать ?
cmd /c "for /f "delims=" %i in ('dir /a:d /b *') do echo %~ti %~i"
Гость
8 - 26.12.2011 - 18:11
нужна разница дат ?
Гость
9 - 27.12.2011 - 02:08
говенный скрипт, он будет работать, если флешка будет под буквой W, а если нет?
Гость
10 - 27.12.2011 - 06:02
(10)
mountvol /l
11 - 27.12.2011 - 07:45
10-ruvirus >всё прикольно работает.
Задать флехе постоянно W
@echo off
cd /d c:
for /f "tokens=*" %%a in (' mountvol %~d0 /l ') do ( mountvol %~d0 /d & mountvol W: %%a & exit )
Гость
12 - 27.12.2011 - 08:52
Батники - каменный век. На Power Shell можно например так:
$folder = c:\temp
$a = Get-Date
$b = Get-Item $folder
$c = $a - $b.LastWriteTime
if ($a>5){Remove-Item $folder**

Как-то так. Можно конечно и в одну строчку :)
13 - 27.12.2011 - 12:27
13-system32 >хорошо, обещаю изучить)
А пока надо батник доделать, чтоб процесс не останавливался.
Гость
14 - 27.12.2011 - 13:16
этот "каменный век" еще сто в очко фору даст всем повершелам и башам
Гость
15 - 27.12.2011 - 13:18
а форфалес не просче ли изучить ?
по сабжу так и нет понимания проблемы
16 - 27.12.2011 - 13:35
:FromNow
SetLocal
Set yyyy=%DATE:~-4%& set /a mm=100%DATE:~3,2%%%100& set /a dd=100%DATE:~,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 yymmdd=%yyyy:~-2%%mm:~-2%%dd:~-2%
Exit /B
Удаляет папки с датами, если они в корне диска V
Если V:\053, то не удаляет.
Гость
17 - 27.12.2011 - 13:43
так пойдет или принципиально исправить сабж ?
set DST=V:\053
forfiles /d -7 /p "%dst%" /c "cmd /c if @isdir==TRUE rd /s/q @path"
18 - 27.12.2011 - 16:07
"forfiles" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Гость
19 - 27.12.2011 - 16:58
... (%DST%\*) ...
...
... rd /s /q "%%~dpnxi"
Гость
20 - 27.12.2011 - 16:59
.. ("%DST%\*") ...
Гость
21 - 27.12.2011 - 17:00
разница в днях вычисляется конечно просче и еще много чего, но не ссут
22 - 28.12.2011 - 18:14
20-Гинзбург >Может я чего недопонимаю, но не работает...
Гость
23 - 29.12.2011 - 15:26
19-Disobedient > forfiles идет в составе серверных решений, можно скопировать в систем32 сию прогу и работать спокойно
24 - 30.12.2011 - 07:53
24-Mikhalyich >это рассматривал, forfiles.exe работает, но он удаляет только файлы, а их в папке около 200 шт. Мне нужно удалять сразу каталоги целиком.
25 - 30.12.2011 - 09:14
В общем так, отдельный батник "засунутый" в планировщик
@echo off
SetLocal EnableExtensions

set BackUp=V:\053
set Num=5

pushd %BackUp%
for /f "tokens=* delims=" %%D in ('dir /ad /b /o-d') do call :Proceed "%%D"
popd
exit

:Proceed
if not %Num%==0 set /a Num-=1&exit /b
echo %date% %time%: Erase %1>>%~dpn0.log
rd /s /q %1 2>nul >nul
exit /b
Гость
26 - 30.12.2011 - 10:20
этот "каменный век" еще сто в очко фору даст всем повершелам и башам
с тобой сложно спорить, но 4 пункт в баше будет одной командой
Гость
27 - 30.12.2011 - 10:26
27>Кончай спорить под новый год. Лучше зайку с ДВ поздравь:)


К списку вопросов






Copyright ©, Все права защищены