Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Требуется помощь по удалению...

Ответить
Настройки темы
CMD/BAT - Требуется помощь по удалению...

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте, уважаемые.
Возможно, проблема тривиальна, но самому не дойти до решения.
Есть папка Users, в ней папки с именами пользователей, в них, естественно еще куча подпапок и файлов. Требуется с помощью bat файла удалить определенные файлы во всех корневых папках пользователей, не затрагивая их подпапки. Только в корневых папках пользователей. То есть, к примеру, в папке C:\Users\Vasia удалить файлы с расширением txt, не затрагивая подпапки C:\Users\Vasia\Documents, C:\Users\Vasia\Desktop и т.д.
Учитывая, что пользователей около трех сотен, и имена у них разные, надо это как то автоматизировать.
"Del /s" в моем случае не подходит, так как удаляет файлы во всех вложенных папках, а не только в корневой каждого пользователя.

Отправлено: 21:02, 10-12-2018

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


Цитата megaloman:
предложите решение »
Что-то судя по вопросу, я неверно понял задачу... Но всё же (только принцип; хотя список папок пользователей может и проще обработать, тем более что в итоге фактически будем иметь то же самое):

Найти в ключе

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

все ветви, начинающихся на

S-1-5-21

(это SID-ы пользователей, причём тех, кто хотя бы раз залогинился в системе: если пользователь создан, но в систему ни разу не входил — его ключа здесь не будет, как и папки его).

И прочитать в каждом из найденных S-1-5-21 значение параметра ProfileImagePath, которое и укажет на папку этого пользователя.

Ну и напомню на всякий случай, что SID S-1-5-21-XXXXXXX-XXXXXXXX-XXXXXXXXXXX-500 — это встроенный администратор. Если он в систему не входил — ни ключа, ни папки его профиля тоже не будет создано.

-------
Mikhail Zhilin


Последний раз редактировалось mwz, 11-12-2018 в 23:24.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:18, 11-12-2018 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Ваш скрипт с || »
точно
так я делал в таком случае, когда были заданы имена пользователей
Код: Выделить весь код
for %%a in (user1 user2 userN) do net user|find "%%a"||echo del /s /q "C:\Users\%%a"

Отправлено: 23:44, 11-12-2018 | #12


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


вот, собственно, все имена пользователей исключая текущего админа:
Код: Выделить весь код
@echo off
for /f "skip=1 delims=" %%a in ('wmic path Win32_UserAccount get FullName /value^|find "="') do set "%%a"& call :#
pause& exit

:#
 if not "%FullName%"=="" echo %FullName%
exit /b
(если брать Name, то будет и имя текущего админа и еще Администратор и Гость)
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:06, 12-12-2018 | #13


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


mwz,
Код: Выделить весь код
@Echo Off
cls
	Set "DelFile=*.txt"
	For /f "delims=" %%i In ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"') Do Call :RegPars "%%i" "%DelFile%"
pause
GoTo :Eof

:RegPars
	FOR /F "tokens=4*  delims=-" %%a IN (%1) DO If %%a==21 (
		For /f "skip=2 tokens=3 delims= " %%p In ('reg query %1 /v ProfileImagePath') Do (
			Echo === %%p
			Dir /A:-D /B "%%p\%~2"
		)
	)
GoTo :Eof
Наверное можно сделать элегантнее. (Dir /A:-D /B заменить на Del)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:37, 12-12-2018 | #14


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Немного подумал и подсократил
Код: Выделить весь код
@Echo Off
cls
	Set "DelFile=*.txt"
	Set "BoxIn=C:\Users"
	For /f "tokens=1,2* delims= " %%i In ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /S') Do (
		If /I "%%i"=="ProfileImagePath" If /I "%%~dpk"=="%BoxIn%\" Echo === %%k &Dir /A:-D /B "%%k\%DelFile%"
	)
pause
GoTo :Eof
Dir /A:-D /B --> Del
Может еще подумать?
После поста alpap
Код: Выделить весь код
@Echo Off
cls
	Set "DelFile=*.txt"
	Set "BoxIn=C:\Users"
	For /f "tokens=3 delims= " %%i In ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /S /V ProfileImagePath') Do (
		If /I "%%~dpi"=="%BoxIn%\" Echo === %%i &Dir /A:-D /B "%%i\%DelFile%"
	)
pause
GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 12-12-2018 в 14:46.


Отправлено: 14:07, 12-12-2018 | #15


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Может еще подумать? »
можно и сразу вывести
Код: Выделить весь код
@echo off
for /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /s /v "ProfileImagePath"^|find /i "C:\Users"') do echo %%b
pause
даже [/v "ProfileImagePath"] можно убрать.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:30, 12-12-2018 | #16

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Сообщения: 8595
Благодарности: 2127

Профиль | Сайт | Отправить PM | Цитировать


alpap
find /i "C:\Users"

В WS2003, например, этой подстроки в данном разделе нет вообще - при том, что значение ProfileImagePath указывает на правильную папку профиля.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:06, 12-12-2018 | #17


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Powershell:
Код: Выделить весь код
$dirs = "$env:SystemDrive\Users"
$ext = "*.txt"
dir $dirs -Directory | dir -File | where Name -like $ext | Remove-Item -Confirm:$false

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 15:35, 12-12-2018 | #18


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата mwz:
В WS2003, например, »
а как там выглядит?
ведь нужны только определенные строки содержащие ProfileImagePath и еще их надо парсить до нужного вывода.

Отправлено: 17:09, 12-12-2018 | #19


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата alpap:
а как там выглядит? »
Documents and Settings, конечно. Для пользовательских учётных записей.

Отправлено: 17:19, 12-12-2018 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Требуется помощь по удалению...

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] нужна помощь по удалению BaiduAn3.0 gott1990 Лечение систем от вредоносных программ 3 13-12-2014 22:45
Route/Bridge - [решено] Требуется помощь по распиновке. Alan Priest Сетевые технологии 2 15-07-2014 13:29
Требуется помощь по удалению вирусов swetta Лечение систем от вредоносных программ 8 21-03-2014 00:45
[решено] Нужна ваша помощь по удалению klpclst.dat KochkinNV Лечение систем от вредоносных программ 25 17-04-2012 17:14
All Требуется помощь по 2000 Ashot Microsoft Windows NT/2000/2003 7 07-02-2004 02:36




 
Переход