Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] удаления кэша 1с (http://forum.oszone.net/showthread.php?t=287397)

yanus74 02-09-2014 22:35 2397601

удаления кэша 1с
 
Здравствуйте! Появилась необходимость удалять кэш 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 2397650

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 2397661

Код:

@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 2397862

Georgio, спасибо!
А откуда берется %%j ?
все, понял, "tokens=1*"

k0l9.khv 28-07-2016 08:01 2654708

Georgio, не удаляются папки с Roaming и можно прокомментировать код если возможно не очень его понял .


Время: 07:48.

Время: 07:48.
© OSzone.net 2001-