[CMD] Удаление папок формата 2016.08.01 - 2016.08.16

У вас проблемы с написанием в плане не знаете как это делается вообще или на чем то конкретно запнулись?
 
CMD/BATCH:
forfiles /d -14 | findstr /RC:"^.....\...\... - ....\...\...." | set/p x=^& if Defined x call echo rd /s /q %%x%%
Совместимость: Windows Vista и новее.
После тестирования удалить echo
 
Последнее редактирование:
"^.....\...\... - ....\...\...." Уважаемый! а что это. Пусть у меня будет путь I:\MY_SETTINGS

CMD/BATCH:
@echo off
set main_dir="I:\My Flash 32 system\WPI\Install\DEL\oldpass"
call :FromNow -3
for /f "delims=" %%i in ('dir "%main_dir%" /b /ad') do call :p "%%i"
exit

:p
setLocal
set dir_date=%~1
set dir_date=%dir_date:~-10%
if %dir_date:~-4% lss %ddmmyyyy:~-4% goto delete
if %dir_date:~-4% gtr %ddmmyyyy:~-4% goto no_delete
if %dir_date:~3,2% lss %ddmmyyyy:~3,2% goto delete
if %dir_date:~3,2% gtr %ddmmyyyy:~3,2% goto no_delete
if %dir_date:~,2% lss %ddmmyyyy:~,2% goto delete
goto no_delete
:delete
rd /s /q "%main_dir%\%~1"
:no_delete
EndLocal
exit /b

:FromNow
setLocal
set now=%date%
set /a yyyy=%now:~-4%
set /a mm=1%now:~3,2%-100
set /a dd=1%now:~,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 yyyymmdd=%yyyy%.%mm:~-2%.%dd:~-2%
exit /b

скажите а вот из этого можно создать? но папки типа 2016.08.01

созданы батником -
Код:
set X=%DATE%
set M=%X:~3,2%
set Y=%X:~6,4%
for /L %%I IN (1,1,31) do (
IF %%I LSS 10 (%Y%.%M%.0%%I) else (mkdir %Y%.%M%.%%I)
)
рожица это : P только вместе
 
Последнее редактирование модератором:
Уважаемый! а что это. Пусть у меня будет путь I:\MY_SETTINGS
В моем батнике путь не указывается. Батник необходимо запускать из той же папки, в которой находятся папки формата 2016.08.01 - 2016.08.16.
^.....\...\... - ....\...\.... - регулярное выражение для отсечения формата, о котором Вы просили.
Если нужно и папку указывать, скажите, я добавлю такую функцию.

рожица это : P только вместе
Код оформляется так.
 
CMD/BATCH:
C:\Windows\forfiles /d -14
| findstr /RC:"^.....\...\... - ....\...\...." |
set/p x=^& if Defined x
call rd /s /q %%x%%
pause
пробовал не работает
 
Последнее редактирование модератором:
Подождите, что вы имеете в виду, когда говорили "старше 2 недель" по первой части названия папки, а не по ее дате изменения?
Мой батник вычисляет по дате модификации.

скажите а вот из этого можно создать?
Из этого нет, но можно по похожему принципу, но там как минимум 2 минуса:
1. Нет фильтрации по формату, как Вы просили, следовательно если там будет что-то кроме папок указанного формата, то код вполне вероятно "вылетит".
2. Код будет зависеть от настроек регионального стандарта даты, установленных в системе, хотя судя по последнему коду он тоже зависим от стандарта, и если он работает правильно то так же правильно будет работать и код выше.

Добавил фильтрацию и заменил функцию получения даты. Этот батник работает по принципу чтения даты из названия папки (первая часть даты).

CMD/BATCH:
@echo off
SetLocal EnableExtensions

set daysAgo=14
set "main_dir=I:\My Flash 32 system\WPI\Install\DEL\oldpass"

call :indate %date% -%daysAgo% TwoWeeksDate

for /f "delims=" %%i in ('dir "%main_dir%" /b /ad^| findstr /RC:"^....\...\... - ....\...\...$"') do call :p "%%i"
pause
exit /B

:p
set file=%~1
call :indate %file:~8,2%.%file:~5,2%.%file:~,4% -0 FileTime
if %FileTime% LEQ %TwoWeeksDate% echo rd /S /Q "%main_dir%\%file%"
exit /b

:InDate
set dat=%~1
Set yyyy=%DAT:~-4%& set /a mm=100%DAT:~3,2%%%100& set /a dd=100%DAT:~,2%%%100
set /A %~3=%~2+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
exit /B

После проверки удалить echo.
CMD/BATCH:
C:\Windows\forfiles /d -14
| findstr /RC:"^.....\...\... - ....\...\...." |
set/p x=^& if Defined x
call rd /s /q %%x%%
pause
пробовал не работает
Это делается не так. Создается батник. В него копируется эта строка. Батник помещается в папку с вашими папками, которые нужно удалить, затем батник нужно запустить.
Чтобы батник сразу не закрывался можно второй строкой написать команду pause.
 
Последнее редактирование модератором:
Код:
set X=%DATE%
set M=%X:~3,2%
set Y=%X:~6,4%
for /L %%I IN (1,1,31) do (
IF %%I LSS 10 (mkdir %Y%.%M%.0%%I) else (mkdir %Y%.%M%.%%I)
)
так правильно
да эти условия правильные но батник не работает
pause из Вашего кода убрал но где то косяк
 
Последнее редактирование модератором:
Станислав, код, пожалуйста, заключайте в теги [code]Ваш код[/code] или есть кнопочка такая (я выше ссылку на тему давал, где всё расписано).

да эти условия правильные но батник не работает
Какой из двух моих?
Я оба проверял и оба у меня работают правильно.
Какая у Вас версия ОС?
Прикрепите батник, который вы проверяете (в виде архива).
Напишите здесь ответ от консоли.
А путь к папке правильно указали?
 
Последнее редактирование:
а мой не работает и Золотой человек можно сделать чтобы файл (код этого батника перепишется в другой батник) запускался не из папки I:\My Flash 32 system\WPI\Install\DEL\oldpass
здесь лишь лежат все мои папки с архивами и резервными файлами.
Да понял теперь только через теги буду писать. Спасибо.
 

Вложения

  • echo.zip
    552 байт · Просмотры: 2
Скорее всего не работает потому что попадает в бесконечный рекурсивный вызов.
Нельзя называть батники именами внутренних команд, таких как echo

можно сделать чтобы файл (код этого батника перепишется в другой батник) запускался не из папки I:\My Flash 32 system\WPI\Install\DEL\oldpass
Достаточно добавить пару команд pushd / popd:
CMD/BATCH:
pushd "I:\My Flash 32 system\WPI\Install\DEL\oldpass"
forfiles /d -14 | findstr /RC:"^.....\...\... - ....\...\...." | set/p x=^& if Defined x call echo rd /s /q %%x%%
popd
pause
Команду echo затем удалите самостоятельно.
 
Последнее редактирование модератором:
Ладно, давайте по-другому.
Скачайте этот архив, распакуйте, запустите файл RemoveOld.cmd
В результате должна будет удалиться одна из папок (в архиве их 2).

Какая у Вас версия ОС?
 

Вложения

  • RemoveOld.zip
    1 KB · Просмотры: 1
Код:
pushd "C:\reserv"
C:\Windows\forfiles /d -14 | findstr /RC:"^..... - ...." | set/p x=^& if Defined x call rd /s /q %%x%%
popd
10
Да Ваш командный файл рабочий и теперь я понимаю что неправильно сформулировал просьбу. Практически всем пользователям нужно сохранять свою работу и желательно по дням чтобы можно было окатится если случилась неприятность. И в этой теме вы создали или создадите файл удалени я и вот та просьба которую я не смог сформулировать - 2016-08-21_180730.jpg папки расположены так как на рисунке, по этому у меня ничего не работало.
Зашибись из откатится получилось окотится - вот и посмеялись
 
Я сам должен был догадаться.

Теперь всё заработало?
 
Вот батник к которому нужна Ваша помощь по удалению устаревших файлов. Простите за мое неграмотную формулировку просьбы.
 

Вложения

  • папки на месяц.zip
    354 байт · Просмотры: 1
pushd "C:\reserv"
C:\Windows\forfiles /d -14 | findstr /RC:"^..... - ...." | set/p x=^& if Defined x call rd /s /q %%x%%
popd
Нет, этот не будет работать так, как Вы хотели бы. Эта версия проверяет по дате модификации.
Используйте вариант из этого поста, только замените регулярное выражение (Вы правильно его изменили).
 
Последнее редактирование:
Нет пожалуйста!!! Мне нужно ежедневно запускать Ваш файл и он будет удалять папки как у меня!! ( а не 2016.08.01-2016.08.14) т.е. иногда бывают пропуски (выходны, заболел) и устаревающие папки нужно удалять.
Простите, но можно удалять по дате числа и месяца .... .08.01 вот наверное правильная формулировка.
 
Назад
Сверху Снизу