Войти

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


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

santey007
19-12-2014, 09:40
подскажите, как написать скрипт, что бы удалялось все, с рабочего стола пользователя, кроме определенных ярлыков.
скрипт предполагаю запускать через КД (Logon)

Iska
19-12-2014, 10:04
определенных ярлыков. »
Например?

santey007
19-12-2014, 10:34
skype,Google Chrome
хотя я думаю можно оставить вообще все ярлыки пока для начала. удалить только файлы и папки.

sov44
19-12-2014, 10:43
удалить только файлы и папки. »
Удалять ярлыки всё-же безопаснее, т.к. некоторые "блондинки" хранят рабочие файлы в папках, созданных на рабочем столе. После удаления папок с документами могут быт проблемы. :)

cameron
19-12-2014, 10:43
нужные ярлыки положить в All Users, тогда удалить их в контексте пользователя будет невозможно.

santey007
19-12-2014, 10:55
sov44 тебя понимаю, но начальство дало указание, убить все безвозвратно(я конечно же бэкапчик то профилей крайний сделаю на КД на всякий). так что можно не бояться...
cameron про ярлыки понял, спасибо за совет, наверно воспользуюсь им перед удалением. я так понимаю так же скрипт нужен, что бы сначала все нужные ярлыки или даже файлики (подключение к RDP, презентация одна) перенести в элюзерс, а потом сносить?

sov44
19-12-2014, 10:57
santey007, вот с ярлыками, просто копирование, Если нужно удаление, думаю сами поправите скрипт
@echo off
SetLocal enabledelayedexpansion

set "my_lnk=7z_sfx_RU.lnk"

if not exist c:\BackUp_lnk md c:\BackUp_lnk
for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users"') do (
for %%b in ("%userprofile%\..\%%a\Desktop\*.lnk") do (
if /i not "%%~nxb"=="%my_lnk%" copy /y "%%b" "c:\BackUp_lnk\"
))
pause
exit

santey007
19-12-2014, 11:31
в скриптах пока мало что понимаю, но думаю наверно так должно быть?
@echo off
SetLocal enabledelayedexpansion

set "my_lnk=7z_sfx_RU.lnk"

if not exist c:\BackUp_lnk md c:\BackUp_lnk
for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users"') do (
for %%b in ("%userprofile%\..\%%a\Desktop\*.lnk") do (
if /i not "%%~nxb"=="%my_lnk%" delete /y "%%b" "c:\BackUp_lnk\"
))
pause
exit

я так понял он копирует их на С в BackUp_lnk?

sov44
19-12-2014, 11:55
Не проверял. Подстрахуйтесь перед использованием скрипта
удаление всех ярлыков c рабочего стола
@echo off
SetLocal enabledelayedexpansion

for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users"') do (
for %%b in ("%userprofile%\..\%%a\Desktop\*.lnk") do (
del /f /q "%%b"
))
pause
exit

удаление всех файлов и ярлыков с рабочего стола
@echo off
SetLocal enabledelayedexpansion

for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users"') do (
for %%b in ("%userprofile%\..\%%a\Desktop\*") do (
del /f /q "%%b"
))
pause
exit

Iska
19-12-2014, 12:03
нужные ярлыки положить в All Users, тогда удалить их в контексте пользователя будет невозможно. »
Тогда их и найти будет невозможно ;). На Рабочем столе пользователя-то.

удалить только файлы и папки. »
На WSH:
Option Explicit

Dim objFSO

Dim objFolder
Dim objFile


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

With objFSO.GetFolder(WScript.CreateObject("WScript.Shell").SpecialFolders.Item("Desktop"))
For Each objFolder In .SubFolders
WScript.Echo objFolder.Path
'objFolder.Delete True
Next

For Each objFile In .Files
Select Case LCase(objFSO.GetExtensionName(objFile.Name))
Case "lnk", "url"
' Nothing to do
Case Else
WScript.Echo objFile.Path
'objFile.Delete True
End Select
Next
End With

Set objFSO = Nothing

WScript.Quit 0

Для удаления раскомментируйте помеченные красным строки. Чтобы не выводились сообщения, закомментируйте или удалите помеченные зелёным строки.

cameron
19-12-2014, 12:13
Тогда их и найти будет невозможно . На Рабочем столе пользователя-то. »
это почему?

sov44
19-12-2014, 12:41
santey007, немного модернизировал скрипт, пробуйте. Для "боевого" запуска убрать echo
@echo off
SetLocal enabledelayedexpansion

for /f "delims=" %%a in ('dir/b/ad-h "%userprofile%\..\*"^|findstr/ixvc:"All Users"') do (
for %%b in ("%userprofile%\..\%%a\Desktop\*") do echo del /f /q "%%b"
for /d %%c in ("%userprofile%\..\%%a\Desktop\*") do echo rd /s /q "%%c"
)
pause
exit

Соглашусь с Iska. Скопировал ярлык с рабочего стола пользователя в c:\Users\Default\Desktop, ярлыка из-под пользователя не увидел. Скопировал в c:\Users\Public\Desktop, ярлык виден и прекрасно удаляется из-под пользователя.
All Users он как-бы есть, но перебрасывает в Public

Iska
19-12-2014, 12:51
cameron, Georgio, ну, задача-то какая была:
с рабочего стола пользователя »
а ежели ярлыки переместим с Рабочего стола пользователя на общий Рабочий стол, то стало быть на Рабочем столе пользователя мы их и не найдём ;).

Для пропуска определённых ярлыков:
Option Explicit

Dim objFSO
Dim objWshShell
Dim objDictionary

Dim objFolder
Dim objFile


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

With objDictionary
.Add "C:\Program Files\Google\Chrome\Application\chrome.exe", ""
.Add "C:\Program Files\Mozilla Firefox\firefox.exe", ""
End With

With objFSO.GetFolder(objWshShell.SpecialFolders.Item("Desktop"))
For Each objFolder In .SubFolders
WScript.Echo objFolder.Path
'objFolder.Delete True
Next

For Each objFile In .Files
Select Case LCase(objFSO.GetExtensionName(objFile.Name))
Case "lnk"
If Not objDictionary.Exists(objWshShell.CreateShortcut(objFile.Path).TargetPath) Then
WScript.Echo objFile.Path
'objFile.Delete True
End If
Case Else
WScript.Echo objFile.Path
'objFile.Delete True
End Select
Next
End With

objDictionary.RemoveAll

Set objDictionary = Nothing
Set objWshShell = Nothing
Set objFSO = Nothing

WScript.Quit 0


Скопировал ярлык с рабочего стола пользователя в c:\Users\Default\Desktop, ярлыка из-под пользователя не увидел. »
На Рабочем столе пользователя Вы должны его увидеть. Причём даже два ярлыка, поскольку скопировали, а не переместили.

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

santey007
19-12-2014, 13:57
а как заодно права развесить на рабочий стол только на чтение?что бы не смогли больше ничего туда сохранять?

Iska
19-12-2014, 14:02
а как заодно права развесить на рабочий стол только на чтение?что бы не смогли больше ничего туда сохранять? »
Не делайте этого.

santey007
19-12-2014, 14:09
почему?

Iska
19-12-2014, 14:13
Если будете очищать — какой смысл? А через неделю-другую пользователи и сами привыкнут к тому, что сохранять на Рабочий стол бесполезно.

santey007
22-12-2014, 08:55
да просто мозг будут выносить: опять сохранил файл на раб. стол, опять забыл его перенести, а это отчет, верни срочно! -вот этого хочу избежать

Anton04
22-12-2014, 23:23
да просто мозг будут выносить: опять сохранил файл на раб. стол, опять забыл его перенести, а это отчет, верни срочно! -вот этого хочу избежать »

А вот это решается административными методами, т.е. бумажками с соответствующими подписями. ;)

santey007
23-12-2014, 08:37
не работают бумажки вообще никак, проверено уже давно и ни раз...




© OSzone.net 2001-2012