Войти

Показать полную графическую версию : [решено] удаления кэша 1с


yanus74
02-09-2014, 22:35
Здравствуйте! Появилась необходимость удалять кэш 1с, папочки в профиле пользователя
располагаются они по путям C:\Users\user\AppData\Local\1C\1Cv82 и C:\Users\user\AppData\Roaming\1C\1Cv82, а называются вот так:
f4f8389b-94d0-4fd3-83c1-97435d600264
06cb45d1-4bbd-426c-9694-5c3faafa72a7
131811ce-f0fa-4aa1-88bb-18e97b0bb43b
131d217d-d2fb-420b-8c24-a818068d2e1e
25fe9715-6c5d-4dd2-b6e3-c15520b09b78
8d9603a8-43bd-40fb-b607-cad7669efa1c
Названия всегда разные, но всегда 37 символов, всегда 4 дефиса, и порядок дефисов один и тот же
Как вывести все папки из всех каталогов пользователей я понял:
@echo off
for /F "tokens=*" %%a in ('dir c:\users /b /ad') do (
for /F "tokens=*" %%b in ('dir c:\users\%%a\AppData\Local\1C\1Cv82 /b /ad') do (
@echo for2: %%b
)
for /F "tokens=*" %%b in ('dir c:\users\%%a\AppData\Roaming\1C\1Cv82 /b /ad') do (
@echo for3: %%b
)
)
Но как определить, что эту папку можно удалить ( т.е. она выглядит как случайные_8_цифры_буквы-случайные_4_цифры_буквы-случайные_4_цифры_буквы-случайные_12_цифры_буквы)
Подскажите пожалуйста, как записать условие, чтоб если имя папки схоже с тем, что я написал, то папка бы удалялась ( со всеми вложенными)
Спасибо!

dedmazai1870
03-09-2014, 00:54
yanus74
Так задайте маску для папки. И возьмите в двойные кавычки путь, на всякий случай. Например так:
for /F "tokens=*" %%b in ('dir "c:\users\%%a\AppData\Local\1C\1Cv82\????????-????-????-????-????????????" /b /ad') do echo for2: "c:\users\%%a\AppData\Local\1C\1Cv82\%%b"
и если нормально, замените echo for2: на rd /s /q
UPD: Вместо dir можно воспользоваться такой командой
for /d %%b in ("c:\users\%%a\AppData\Local\1C\1Cv82\????????-????-????-????-????????????") do echo for2: "c:\users\%%a\AppData\Local\1C\1Cv82\%%b"
Из справки:
FOR /D %переменная IN (набор) DO команда [параметры]

Если набор содержит подстановочные знаки, команда выполняется
для всех подходящих имен каталогов, а не имен файлов.

Georgio
03-09-2014, 02:15
@echo off

set "folders=C:\Users\%%k\AppData\$\1C\1Cv82\*-*-*-*-*"
for /f "tokens=1* delims==" %%i in ('
wmic useraccount where Status^='OK' get Name /value
') do (
for /f "delims=" %%k in ("%%j") do (
for /f "delims=" %%l in ('
dir /ad/b/s "%folders:$=Local%" "%folders:$=Roaming%"^| findstr /ir "\\[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]\-"^| findstr /ir "\-[0-9a-f][0-9a-f][0-9a-f][0-9a-f]\-[0-9a-f][0-9a-f][0-9a-f][0-9a-f]\-[0-9a-f][0-9a-f][0-9a-f][0-9a-f]\-"^| findstr /ir "\-[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$"
') do (
echo rd /q/s "%%l"
)
)
)

pause>nul
exit /b


yanus74, если код устроит, команды "echo " и "pause>nul" (отмечены красным цветом) из него уберите.

yanus74
03-09-2014, 15:04
Georgio, спасибо!
А откуда берется %%j ?
все, понял, "tokens=1*"

k0l9.khv
28-07-2016, 08:01
Georgio, не удаляются папки с Roaming и можно прокомментировать код если возможно не очень его понял .




© OSzone.net 2001-2012