Пакетный файл для удаления C: \ users \ * name *, за исключением указанных папок - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь написать пакетный файл для удаления всех папок в c: \ users с некоторыми исключениями.

Сценарий: у нас есть несколько общих компьютеров в библиотеке, на которые пользователи могут войти и никогда не использовать снова,Это часто заполняет диск c: \ пользовательскими профилями.

Я хотел бы удалить все папки из c: \ users, кроме c: \ users \ defaultuser0 и c: \ users \ public.

Надеюсь, это имеет смысл?Я видел некоторые другие вопросы / ответы, но они только указывают, как указать 1 папку.Кроме того, мне известно о delprof, поскольку мы используем его в других приложениях, но я хотел бы написать свой собственный файл, чтобы я мог изменить его для этого случая.

Ответы [ 4 ]

0 голосов
/ 25 марта 2019

TL; DR:

wmic /namespace:\\root\cimv2 path win32_userprofile where "SID LIKE 'S-1-5-21%' AND NOT LocalPath LIKE '%-Admin' AND NOT LocalPath LIKE '%\\ToolBox'" delete

Подробности:

В своей голове я перевел вопрос с «удалить все папки» и вместо этого сделал «удалить все профили пользователей».Если это не так, не стесняйся побить меня.: -)

Недавно у меня был проект, в котором мне нужно было сделать то же самое, и я использовал решение выше.Единственное предостережение в том, что Windows не удалит профиль, который активен и в данный момент загружен в память - и я посчитал это хорошей вещью.В этих случаях после перезагрузки системы профиль больше не загружается, и вызов DELETE будет работать нормально.Это не только удалит каталоги и файлы, но также выполнит обычную работу по очистке профилей.

Обратите внимание: я знаю, что это избыточно, но поскольку это удаляет профили, это означает, что файлы, хранящиеся в профилях, могут/ будут также удалены.Вы можете сделать резервную копию файлов перед удалением.

Просмотр и отчет

wmic /namespace:\\root\cimv2 path win32_userprofile where "SID LIKE 'S-1-5-21%' AND NOT LocalPath LIKE '%-Admin' AND NOT LocalPath LIKE '%\\ToolBox'" get LocalPath,LastUseTime,SID

Поиск и уничтожение

wmic /namespace:\\root\cimv2 path win32_userprofile where "SID LIKE 'S-1-5-21%' AND NOT LocalPath LIKE '%-Admin' AND NOT LocalPath LIKE '%\\ToolBox'" delete
0 голосов
/ 22 февраля 2019

Если вы все еще хотите удалить каталоги, вопреки моей рекомендации , я бы предложил использовать WMIC, например, из пакетного файла:

@For /F "Tokens=1*Delims==" %%A In ('WMIC Path Win32_UserProfile Where "Special!='True' And LocalPath Is Not Null And Not LocalPath Like '%%\\defaultuser0'" Get LocalPath /Value 2^>Nul')Do @For /F "Tokens=*" %%C In ("%%B")Do @RD/S/Q "%%C"

Если вы предпочитаетебыло для Net User метода, я бы по-прежнему предлагал WMIC из командного файла, например:

@For /F Tokens^=2^Delims^=^" %%A In ('WMIC Path Win32_UserProfile Where^
 "Special!='True' And LocalPath Is Not Null" Assoc^
 /AssocClass:Win32_UserAccount 2^>Nul')Do @For /F "Tokens=1*Delims==" %%B In ('
    WMIC UserAccount Where^
 "SID='%%A' And LocalAccount='TRUE' And Name!='defaultuser0'" Get Name /Value^
 2^>Nul')Do @For /F Tokens^=* %%D In ("%%C")Do @Net User "%%D" /Delete

Использование WMI для получения путей и / или имен учетных записей пользователей оченьболее надежный, чем просто выбор каталогов по умолчанию, расположение и исходные имена пользователей

0 голосов
/ 22 февраля 2019

Вы можете сохранить резервную копию папок, удалить все папки и, наконец, переместить папки резервных копий обратно в папку, вот пример:

@echo off
md c:\folderbackup
copy c:\users\defaultuser0 c:\folderbackup\defaultuser0
copy c:\users\public c:\folderbackup\public
del /f /q c:\users\*.*
move c:\folderbackup\defaultuser0 c:\users\defaultuser0
move c:\folderbackup\public c:\users\public
rd c:\folderbackup

Если указано Access Denied, попробуйте запустить с правами администратора.,

0 голосов
/ 22 февраля 2019

Вы, похоже, неправильно поняли, что такое профайл пользователя и что такое пользователи.Даже если вы удалите их папку из C:\Users\username, некоторая информация будет сохранена, как указано Compo здесь , например, в некоторых программах, которые вы установили в C:\Program Files*\*, в C:\Windows\* и т. д. Информация не будет потеряна , если вы просто удалите каталог userprofile.

Однако, чтобы добиться того, что вы хотите, хотя и не рекомендуется для испортить ваша система, используйте (запустить с правами администратора):

@echo off
setlocal EnableDelayedExpansion

set exclude_list="defaultuser0" "public"

for /F "delims= eol=" %%A IN ('dir /B /AD "C:\Users\"') do (
    if "!exclude_list:%%A=!" == "%exclude_list%" (rd /s /q "%%~fA")
)

echo Cleared the unneeded folders in C:\Users^^! Folders remaining:
dir /b "C:\Users\"

Команда для удаления пользователя официально указана в cmd net user username /delete.Для этого выполните следующие действия:

@echo off
setlocal EnableDelayedExpansion

set exclude_list="defaultuser0" "public"

for /F "delims= eol=" %%A IN ('dir /B /AD "C:\Users\"') do (
    if "!exclude_list:%%A=!" == "%exclude_list%" (net user %%~nxA /delete)
)

Обратите внимание, что в обоих случаях добавьте в кавычках имя папки, которое вы хотите исключить.

Для получения дополнительной информацииИнформацию об используемых командах, попробуйте взглянуть на страницы справки следующих команд в cmd:

  • echo /?
  • setlocal /? включено, потому что мы не можем сделать %exclude:%%A=%.Слишком много %.
  • set /?
  • for /?
  • if /?
  • rd /?
  • net user /?

Некоторые интересные ссылки для дальнейшего чтения:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...