Что нового

[Файловая система] Скрипт для очистки рабочего стола и профиля пользователя

Нщыр

Новичок
Сообщения
4
Репутация
0
Здравствуйте! Не будучи ни разу программистом, набрёл как-то на этот замечательный язык. Нацарапав пару полезных скриптов, решил взяться за более серьёзное(в моём понимании) дело.
Я задумал сделать мастер очистки профиля пользователя от «тяжёлых» файлов, которыми так любят засорять оные моя жена и остальные родственники.
Программа должна сканировать рабочий стол, папку мои документы, и, в «тяжёлом» случае, создав ярлык в том же месте, переместить файл в заранее указанный (в настройках) каталог, а так же время от времени чистить корзину. Но, к сожалению не знаю с чего начать. И, даже как продолжить. Написал бы в «стол заказов», но хочется самому. Если есть желание- помогите, хотя бы в общих чертах (алгоритм +основа скрипта/программы)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Нщыр
А что в Вашем понимании означает "тяжелые" файлы?
 
Автор
Н

Нщыр

Новичок
Сообщения
4
Репутация
0
madmasles сказал(а):
Нщыр
А что в Вашем понимании означает "тяжелые" файлы?
"Тяжёлые"- те, что "весят" более 10Mb. Бывают, в особо запущеном виде, до нескольких Gb.
Что отрицательно сказывается на работе компьютера (особенно с пользовательским профилем гигов в 15-20).
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Этот код сканирует рабочий стол, и если файл не имеет "скрытый" или "только чтение" атрибуты, то выводит его в консоль. Также здесь пропускаются все папки и ярлыки (расширение ".lnk").

Код:
#Include <File.au3>

$FileList = _FileListToArray(@DesktopDir, '*', 1)
For $i = 1 To $FileList[0]
	$Attrib = FileGetAttrib(@DesktopDir & '\' & $FileList[$i])
	If (Not StringInStr($Attrib, 'H')) And (Not StringInStr($Attrib, 'R')) And (StringCompare(StringRegExpReplace($FileList[$i], '^.*\.', ''), 'lnk')) Then
		ConsoleWrite($FileList[$i] & @CR)
	EndIf
Next


Думай.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Нщыр
В дополнение к примеру Yashied`a Вам может понадобиться следующее:
Код:
_WinAPI_ShellQueryRecycleBin() ;кол-во файлов и их размер в корзине
FileRecycleEmpty() ;очистить корзину
FileCreateShortcut() ;создать ярлык
FileGetSize() ;вернуть размер файла
FileMove() ;переместить файл
;макросы:
@DesktopDir ;рабочий стол
@MyDocumentsDir ; Мои документы

PS
Для работы функции _WinAPI_ShellQueryRecycleBin() нужно скачать Расширение стандартной AutoIt библиотеки WinAPI.au3, положить WinAPIEx.au3 в папку ...:\Program Files\AutoIt3\Include\, а в начале скрипта добавить
Код:
#Include <WinAPIEx.au3>
.
 
Автор
Н

Нщыр

Новичок
Сообщения
4
Репутация
0
Что-то не могу понять: ниже приведённый скрипт отлично работает, если заменить @DesktopDir на любую другую директорию. Но не с рабочим столом.
Код:
#Include <File.au3>
$FileList = _FileListToArray(@DesktopDir, '*' ,0)
For $i=1 To $FileList[0]
	$FSize = FileGetSize(@DesktopDir & '\' & $FileList[$i])
	$DSize = DirGetSize(@DesktopDir  & $FileList[$i],0)
	$Nam = 1024
    If   $FSize >$Nam    Then
		FileMove (@DesktopDir & $FileList[$i], 'C:\New\' & $FileList[$i] ,9)
    EndIf
	FileCreateShortcut( 'C:\New\' & $FileList[$i] , @DesktopDir & $FileList[$i]&'.lnk' )
	If  $DSize>$Nam Then
		DirMove (@DesktopDir & $FileList[$i], 'C:\New\' & $FileList[$i] ,1 )
	EndIf
	FileCreateShortcut( 'C:\New\' & $FileList[$i] , @DesktopDir & $FileList[$i]&'.lnk' )
Next
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Нщыр
Здесь:
Код:
;...
$FSize = FileGetSize(@DesktopDir & '\' & $FileList[$i])
;...
У Вас правильно, а здесь:
Код:
;...
$DSize = DirGetSize(@DesktopDir  & $FileList[$i],0)
;...здесь:
FileMove (@DesktopDir & $FileList[$i], 'C:\New\' & $FileList[$i] ,9)
;...и здесь:
DirMove (@DesktopDir & $FileList[$i], 'C:\New\' & $FileList[$i] ,1 )
;...
Отсутствует слэш. Попробуйте заменить на
Код:
;...
$DSize = DirGetSize(@DesktopDir & '\' & $FileList[$i],0)
;...
FileMove (@DesktopDir & '\' & $FileList[$i], 'C:\New\' & $FileList[$i] ,9)
;...
DirMove (@DesktopDir & '\' & $FileList[$i], 'C:\New\' & $FileList[$i] ,1 )
;...
 
Автор
Н

Нщыр

Новичок
Сообщения
4
Репутация
0
Madmasles: Огромное спасибо, простите за невнимательность, всё работает.
В принципе тема решена, но подождём немного, пока GUI прикручу, мало ли, вдруг(ВНЕЗАПНО!!!!11!) вопросы возникнут.Код такой(в вдруг я не один такой дятел?)
Код:
#Include <File.au3>
$FileList = _FileListToArray(@DesktopDir, '*' ,0)
For $i=1 To $FileList[0]
	$FSize = FileGetSize(@DesktopDir & '\' & $FileList[$i])
	$DSize = DirGetSize(@DesktopDir & '\'  & $FileList[$i],0)
	$Nam = 1024
    If   $FSize >$Nam    Then
		FileMove (@DesktopDir & '\' & $FileList[$i], 'C:\New\' & $FileList[$i] ,9)
    EndIf
	FileCreateShortcut( 'C:\New\' & $FileList[$i] , @DesktopDir & '\' & $FileList[$i]&'.lnk' )
	If  $DSize>$Nam Then
		DirMove (@DesktopDir & '\' & $FileList[$i], 'C:\New\' & $FileList[$i] ,1 )
	EndIf
	FileCreateShortcut( 'C:\New\' & $FileList[$i] , @DesktopDir & '\' & $FileList[$i]&'.lnk' )
Next
 
Верх