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

Компьютерный форум 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 | Цитировать


Цитата alpap:
а как там выглядит? »
Так:

-------
Mikhail Zhilin


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



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

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


Ветеран


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

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


У меня через реестр вообще не показывает новосозданных юзеров, а так показывает:
Код: Выделить весь код
@echo off
set "uspath=Users"
:: для WS2003 и т.п. закомментировать строку выше и раскомментировать строку ниже (либо надо делать определение ОС и условие)
:: set "uspath=Documents and Settings"

for /f "delims=" %%a in ('wmic path Win32_UserAccount get FullName /value^|find "="') do set "%%a"& call :#
pause& exit

:#
 if not "%FullName%"=="" net user|>nul find "%FullName%" && echo "%Systemdrive%\%uspath%\%FullName%" 
exit /b

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


Ветеран


Contributor


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

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


ИМХО, вот это должно работать и в 2003, проверить не на чем
Код: Выделить весь код
@Echo Off
cls
	Set "DelFile=*.txt"
	For /f "delims=" %%a In ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /F "S-1-5-21-*"') Do (
		For /f "Skip=2 tokens=2,* delims= " %%i In ('2^>nul reg query "%%a" /V ProfileImagePath') Do  Echo === %%j &Dir /A:-D /B "%%j\%DelFile%"
	)
pause
GoTo :Eof
Исправлено после тестирования mwz

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


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


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


Ветеран


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

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


Цитата alpap:
У меня через реестр вообще не показывает новосозданных юзеров »
Пока не будет создан для него профиль — конечно, не будет. В принципе, достаточно будет запустить от имени этого новосозданного пользователя какое-нибудь приложение с ожиданием, чтобы профиль для него был создан.

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

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

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Цитата alpap:
У меня через реестр вообще не показывает новосозданных юзеров »
Я об этом сразу написал, хоть и чуток другими словами: в http://forum.oszone.net/post-2845444.html#post2845444

Как и со скриншом из WS2003: там сразу после установки несколько лет назад было создано ещё 4 пользователя. Но они ни разу не логинились, заходят (и то не все) только по ftp, и их профили созданы не были. Исходная же задача — чистить файлы в профилях пользователей; а если профиля нет — то и чистить исходно нечего.

Цитата megaloman:
вот это должно работать и в 2003, проверить не на чем »
Где-то кавычки забыты (Echo Off убрано; копия из окна CMD "as is", без устранения переноса строк):

Скрытый текст
c:\TEMP>Set "DelFile=*.txt"

c:\TEMP>For /F "delims=" %a In ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsof
t\Windows NT\CurrentVersion\ProfileList" /F "S-1-5-21-*"') Do (For /F "Skip=2 to
kens=3 delims= " %i In ('2>nul reg query "%a" /V ProfileImagePath') Do Echo ===
%i & Dir /A:-D /B "%i\*.txt" )

c:\TEMP>(For /F "Skip=2 tokens=3 delims= " %i In ('2>nul reg query "HKEY_LOCAL_M
ACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-1449298
094-4144929868-1542513627-1030" /V ProfileImagePath') Do Echo === %i & Dir /A:
-D /B "%i\*.txt" )

c:\TEMP>Echo === C:\Documents & Dir /A:-D /B "C:\Documents\*.txt"
=== C:\Documents
The system cannot find the file specified.

c:\TEMP>(For /F "Skip=2 tokens=3 delims= " %i In ('2>nul reg query "HKEY_LOCAL_M
ACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-1449298
094-4144929868-1542513627-500" /V ProfileImagePath') Do Echo === %i & Dir /A:-
D /B "%i\*.txt" )

c:\TEMP>Echo === C:\Documents & Dir /A:-D /B "C:\Documents\*.txt"
=== C:\Documents
The system cannot find the file specified.

c:\TEMP>(For /F "Skip=2 tokens=3 delims= " %i In ('2>nul reg query "End of searc
h: 2 match(es) found." /V ProfileImagePath') Do Echo === %i & Dir /A:-D /B "%i
\*.txt" )

c:\TEMP>pause
Press any key to continue . . .

-------
Mikhail Zhilin


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

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

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


Ветеран


Contributor


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

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


mwz, Там сложнее: при разборе не было учтено, что "Documents and Settings" содержит пробелы. Исправил. Если можно, протестируйте, пожалуйста.

Кстати, я обычно при отладке при Echo On записываю получившееся в файл способом файл.bat >результат.txt 2>&1
Читабельность лучше.
Единственное, если есть пауза, надо на черном экране энтер нажать для завершения батника.

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


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

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

Отправлено: 22:25, 12-12-2018 | #26

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Изображения
Тип файла: gif cls1.gif
(3.8 Kb, 5 просмотров)

Цитата megaloman:
не было учтено, что "Documents and Settings" содержит пробелы »
Ну я-то и имел в вижу именно это. Просто чаще всего так бывает при отсутствии кавычек: если выражение не заключено в кавычки, то синтаксический разбор идёт до первого пробела, который рассматривается как разделитель.

Вот теперь вроде нормально (не знаю только, что за значок появился в результате выполнения команды cls — тут-то его видно не будет, так что приложил скриншот):
Скрытый текст
c:\TEMP>cls

c:\TEMP>Set "DelFile=*.txt"

c:\TEMP>For /F "delims=" %a In ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" /F "S-1-5-21-*"') Do (For /F "Skip=2 tokens=2,* delims= " %i In ('2>nul reg query "%a" /V ProfileImagePath') Do Echo === %j & Dir /A:-D /B "%j\*.txt" )

c:\TEMP>(For /F "Skip=2 tokens=2,* delims= " %i In ('2>nul reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-1449298094-4144929868-1542513627-1030" /V ProfileImagePath') Do Echo === %j & Dir /A:-D /B "%j\*.txt" )

c:\TEMP>Echo === C:\Documents and Settings\UpdatusUser & Dir /A:-D /B "C:\Documents and Settings\UpdatusUser\*.txt"
=== C:\Documents and Settings\UpdatusUser
Test.txt

c:\TEMP>(For /F "Skip=2 tokens=2,* delims= " %i In ('2>nul reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-1449298094-4144929868-1542513627-500" /V ProfileImagePath') Do Echo === %j & Dir /A:-D /B "%j\*.txt" )

c:\TEMP>Echo === C:\Documents and Settings\Administrator & Dir /A:-D /B "C:\Documents and Settings\Administrator\*.txt"
=== C:\Documents and Settings\Administrator
Test1.txt

c:\TEMP>(For /F "Skip=2 tokens=2,* delims= " %i In ('2>nul reg query "End of search: 2 match(es) found." /V ProfileImagePath') Do Echo === %j & Dir /A:-D /B "%j\*.txt" )

c:\TEMP>pause
Press any key to continue . . .

c:\TEMP>GoTo :Eof

-------
Mikhail Zhilin


Отправлено: 22:55, 12-12-2018 | #27


Ветеран


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

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


Цитата megaloman:
Кстати, я обычно при отладке при Echo On записываю получившееся в файл способом файл.bat >результат.txt
Читабельность лучше.
Единственное, если есть пауза, надо на черном экране энтер нажать для завершения батника. »
Far Manager наше всё .

Цитата mwz:
(не знаю только, что за значок появился в результате выполнения команды cls — тут-то его видно не будет, так что приложил скриншот): »
Вероятно, это 0x0С — FORM FEED, когда хост не может/не знает/не умеет сделать прогон печати, которым, надо полагать, и реализуется очистка консоли в cmd.exe, а в данном случае просто делается попытка отображения его как символа. Можете проверить также посредством echo c символами BELL (0x07), BACKSPACE (0x08) и т.п.

Кстати, что за хост на скриншоте?

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

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Цитата Iska:
Кстати, что за хост на скриншоте? »
На котором?
Если не на последнем — то это мой домашний серверок.

А значок... Проверил исходный текст, хотя мог бы и сразу сообразить это сделать — и увидел, что в вывод действительно ушёл код 0x0C. Ну а значок — это просто такой глиф в шрифте, которым пошла вставка: с номером непечатного символа 000С в рамке. При других шрифтах он и смотрится по-другому (или не виден вообще), поскольку глифы другие.

-------
Mikhail Zhilin


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


Ветеран


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

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


Цитата mwz:
На котором? »
На этом:

явно же не гольная консоль.

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



Компьютерный форум 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




 
Переход