PDA

Показать полную графическую версию : Требуется помощь по удалению...


Страниц : 1 [2]

mwz
12-12-2018, 18:42
а как там выглядит? »

Так:
http://www.imageup.ru/img175/thumb/profiles3235832.jpg (http://www.imageup.ru/img175/3235832/profiles.gif.html)

alpap
12-12-2018, 20:13
У меня через реестр вообще не показывает новосозданных юзеров, а так показывает:

@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

megaloman
12-12-2018, 21:07
ИМХО, вот это должно работать и в 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

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

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

mwz
12-12-2018, 22:00
У меня через реестр вообще не показывает новосозданных юзеров »

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

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

вот это должно работать и в 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 . . .

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

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

mwz
12-12-2018, 22:55
не было учтено, что "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

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

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

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

mwz
13-12-2018, 00:53
Кстати, что за хост на скриншоте? »

На котором? :)
Если не на последнем — то это мой домашний серверок.

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

Iska
13-12-2018, 00:55
На котором? »
На этом:
https://i.imgur.com/QGKhamw.png
явно же не гольная консоль.

mwz
13-12-2018, 01:15
Iska

А, так это окно ввода в FireFox 63.0.3 :)
Куда я Ctrl+V сделал.

А в IE, как я сейчас посмотрел, этот значок не проявляется.

Iska
13-12-2018, 01:27
А, так это окно ввода в FireFox 63.0.3
Куда я Ctrl+V сделал. »
Ясно. А где Ctrl-C делался?

mwz
13-12-2018, 13:44
А где Ctrl-C делался? »
Перенаправил вывод так, как предложил megaloman (test.bat>result.txt), а затем открыл result.txt в Akelpad — откуда и скопировал. Символ 0x0C там выглядел как прямоугольник, который во многих шрифтах используют как глиф-заместитель (в частности для непечатных символов).

PS
А, наконец-то понял смысл вопроса. :)
Нет, не из консоли.

Iska
13-12-2018, 14:33
Перенаправил вывод так, как предложил megaloman (test.bat>result.txt), а затем открыл result.txt в Akelpad — откуда и скопировал. »
Точно, простое перенаправление вывода кажет:
https://i.imgur.com/fTNldUq.png
Оказывается, я просто сто лет не использовал команду CLS в пакетных файлах :lol:.

А, наконец-то понял смысл вопроса.
Нет, не из консоли. »
Я думал, может какой-нибудь SciTE или ещё что-нибудь подобное (когда увидел вертикальный курсор), которые умеют исполнять код под внешним исполнителем и перехватывать вывод.

megaloman
13-12-2018, 14:43
mwz, Простите меня! Надо делать так: файл.bat >результат.txt 2>&1 При этом и сообщения CMD о ошибках тоже попадут в файл, что при отладке немаловажно. А первый символ при этом меня никогда не напрягал и я о нём даже не задумывался. Спасибо Iska, просветил

Iska
13-12-2018, 15:37
Я тогда напишу сюда же, как сие может выглядеть под Far Manager'ом:
@echo off
setlocal enableextensions enabledelayedexpansion

echo Какой-то вывод
несуществующая команда

endlocal
exit /b 0

https://i.imgur.com/aTU7Y60.png
где «edit:» — префикс плагина FarCmd, указывающий плагину перехватить вывод («<») stdout и stderr («*») команды, в роли которой в данном случае выступает "%comspec% /c" с параметром «0003.cmd». Перехваченный вывод направляется во временный файл, который открывается в редакторе:
https://i.imgur.com/fbux6kl.png
Если нужно направить вывод stdout и stderr в отдельные окна — вместо «*» используется «?».

Команду можно поместить в меню пользователя (вызываемое по «F2») и пользовать по необходимости. Я чаще всего пользую данный плагин для получения справки, в несколько изменённом виде, а именно в виде Lua-кода:
lua:if CmdLine.Empty then print("edit:<" .. mf.clip(0)); else Keys("CtrlHome");print("edit:<"); Keys("CtrlEnd Enter"); end;
т.е., я набираю в командной строке, например, «for /?», нажимаю «F2», нажимаю «R» (горячая клавиша, заданная этому созданному пункту меню, «Run & Edit»), выполняется вышеуказанный код, который, если командная строка пуста, вводит в командную строку текст «edit:<», затем вводит содержимое буфера обмена и останавливается (позволяя либо сразу выполнить команду по ручному нажатию «Enter», либо предварительно откорректировать её, а потом уже нажимать «Enter»), в противном случае «нажимает» комбинацию клавиш «CtrlHome», помещающую курсор ввода в начало командной строки, вводит в позиции курсора ввода текст «edit:<», затем «нажимает» комбинацию клавиш «CtrlEnd», помещающую курсор ввода в конец командной строки и «нажимает» «Enter» отправляя команду на исполнение. В описанном примере результатом будет открытый редактор, в котором будет находиться вся выведенная справка по команде «for»:
https://i.imgur.com/1ZQJOEv.png

В общем и целом — до чёртиков удобно.

mwz
13-12-2018, 16:22
Надо делать так »

Что, повторить так? Без проблем, но вот тут уже не пойму, как запускается и работает вторая часть. :)

megaloman
13-12-2018, 18:16
mwz, возьмите, например, батник от Iska
Запустите его. (Для определенности обзовём его файл.bat)
Получите на консоли то что в эхо и сообщение об отсутствующей команде.
Запустите файл.bat >результат.txt
Получите в тхт- файле то, что в эхо, и на консоли сообщение об отсутствующей команде
Запустите файл.bat >результат.txt 2>&1
Получите в файле и то, что в эхо, и аварийное сообщение об отсутствующей команде
Стандартно вывод направляется в поток с дескриптором 1 (мы его направляем в файл.
Ошибочные сообщения направляются в поток 2. Указание 2>&1 перенаправляет этот поток туда же, куда направлен поток 1.
Поищите в гугле cmd перенаправление вывода.

alpap
13-12-2018, 23:59
... команду CLS »
этот символ можно лицезреть еще так:

@echo off& for /f %%a in ('cls') do echo:%%a& pause>nul

Iska
14-12-2018, 00:25
alpap, значит, вероятнее всего, моё предположение было неверным, и ClearScreen реализует сам командный процессор через «сладкую парочку» FillConsoleOutputCharacter() и FillConsoleOutputAttribute().




© OSzone.net 2001-2012