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>Кончай спорить под новый год. Лучше зайку с ДВ поздравь:) | |
| Интернет-форум Краснодарского края и Краснодара |