![]() |
OFF. Помогите допилить батник. Когда я его только садился писать, то создал тему на "Разработка программ", но меня сразу "послали" сюда. Батник я собрал, работает, смысл его: 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 |
Что то подсказывает, что проблем в [b]SetLocal[/b] 14 строка... |
Я что-то не догнал, зачем такая сложность в FromNow. Нельзя там что-то попроще, например: strDate = Datepart("yyyy",Date()) & right("0"&Datepart("m",Date()),2) & right("0"&Datepart("d",Date()),2) ? |
Ааа, сорри, догнал, это ж батник, а не vbscript :) |
4-Flukostat >Второй вопрос - почему нельзя использовать wsh? :-) |
Походу я их не различаю, для меня что wscript, что cscript, одна малина, только w он еще, вроде, окошки диалоговые выводит. А так - хз, оба обрабатывают vbs-файлы :) |
PS Автор, а ведь, походу, на скриптах задача решается быстро и дешево. в отличие от батника :) |
расшифровать ? cmd /c "for /f "delims=" %i in ('dir /a:d /b *') do echo %~ti %~i" |
нужна разница дат ? |
говенный скрипт, он будет работать, если флешка будет под буквой W, а если нет? |
(10) mountvol /l |
10-ruvirus >всё прикольно работает. Задать флехе постоянно W @echo off cd /d c: for /f "tokens=*" %%a in (' mountvol %~d0 /l ') do ( mountvol %~d0 /d & mountvol W: %%a & exit ) |
Батники - каменный век. На Power Shell можно например так: $folder = c:\temp $a = Get-Date $b = Get-Item $folder $c = $a - $b.LastWriteTime if ($a>5){Remove-Item $folder** Как-то так. Можно конечно и в одну строчку :) |
13-system32 >хорошо, обещаю изучить) А пока надо батник доделать, чтоб процесс не останавливался. |
этот "каменный век" еще сто в очко фору даст всем повершелам и башам |
а форфалес не просче ли изучить ? по сабжу так и нет понимания проблемы |
: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, то не удаляет. |
так пойдет или принципиально исправить сабж ? set DST=V:\053 forfiles /d -7 /p "%dst%" /c "cmd /c if @isdir==TRUE rd /s/q @path" |
"forfiles" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. |
... (%DST%\*) ... ... ... rd /s /q "%%~dpnxi" |
.. ("%DST%\*") ... |
разница в днях вычисляется конечно просче и еще много чего, но не ссут |
20-Гинзбург >Может я чего недопонимаю, но не работает... |
19-Disobedient > forfiles идет в составе серверных решений, можно скопировать в систем32 сию прогу и работать спокойно |
24-Mikhalyich >это рассматривал, forfiles.exe работает, но он удаляет только файлы, а их в папке около 200 шт. Мне нужно удалять сразу каталоги целиком. |
В общем так, отдельный батник "засунутый" в планировщик @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 |
[em]этот "каменный век" еще сто в очко фору даст всем повершелам и башам[/em] с тобой сложно спорить, но 4 пункт в баше будет одной командой |
27>Кончай спорить под новый год. Лучше зайку с ДВ поздравь:) |
Текущее время: 17:30. Часовой пояс GMT +3. |