[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1284
  • Репутация:126

    [+] [-]
Hunter23071985, перед тем как получить размер за доли секунд прога должна несколько секунд/минут создавать свою базу. На шпидельном диске есть определённая скорость доступа к файлам, которую не обойти ни чем. Кроме как вчера получить размер, а сегодня этот размер использовать.

Комментарий от Гость


Я немного протестровал скорость Everything, и, если честно - был приятно удивлён. Есть у меня одна тестовая папка, для которой получение размера длится более 3мин. Так вот, портативная Everything с нуля (после загрузки ОС) сканирует все мои диски за минуту и показывает правильный размер тестовой папки. Более того, после неё получение размера тестовой папки обычными способами всё так же 3мин. А если "взвешивать" папку FAR/TC/проводником/diruse.exe, тогда последующее получение результата мгновенное.
Так что не всё так однозначно, у Everything свои хитрости (что-то связанное с особенностями NTFS).

[Цитировать]

    Hunter23071985
  • 874
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 173
  • Репутация:6

    [+] [-]
AZJIO, или оставить только нужные папки в Everything.ini. ))

CalcFolders3.cmd

:: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
:: SIZES OF USER FOLDERS
:: forum: https://www.voidtools.com/forum/viewtopic.php?f=2&t=10425
:: everything.exe: https://www.voidtools.com/forum/viewtopic.php?f=12&t=9787
:: es.exe: https://www.voidtools.com/ru-ru/downloads/#cli
:: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
:: ¶ CLEAN CONSOLE
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CHCP 1251
SETLOCAL
CLS
@echo off
:: ¶ START TIMER
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SET _time=%time: =0%
SET /a _hours=100%_time:~0,2%%%100,_min=100%_time:~3,2%%%100,_sec=100%_time:~6,2%%%100,_cs=%_time:~9,2%
SET /a _started=_hours*60*60*100+_min*60*100+_sec*100+_cs
:: ¶ FIND PATHS
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FOR /F "tokens=2*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Favorites^|FIND/I "Favorites"') DO SET pFAV=%%B\
FOR /F "tokens=3*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Pictures" ^|Find "REG_"') DO SET pPIC=%%B\
FOR /F "tokens=3*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Music" ^|Find "REG_"') DO SET pMUS=%%B\
FOR /F "tokens=3*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "My Video" ^|Find "REG_"') DO SET pVID=%%B\
FOR /F "tokens=2*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Desktop^|FIND/I "Desktop"') DO SET pDSK=%%B\
FOR /F "tokens=2*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Personal^|FIND/I "Personal"') DO SET pPER=%%B\
FOR /F "tokens=1,2*" %%T IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "{374DE290-123F-4565-9164-39C4925E467B}"') DO SET pDWN=%%V\
FOR /F "tokens=1,2*" %%T IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}"') DO SET pGAM=%%V\
FOR /F "tokens=2*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Startup^|FIND/I "Startup"') DO SET pSUS=%%B\
FOR /F "tokens=3*" %%j IN ('REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Startup"') DO SET pSCS=%%k\
FOR /F "tokens=2*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v NetHood^|FIND/I "NetHood"') DO SET pNET=%%B\
FOR /F "tokens=2*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v SendTo^|FIND/I "SendTo"') DO SET pSND=%%B\
FOR /F "tokens=2*" %%A IN ('REG QUERY "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v Programs^|FIND/I "Programs"') DO SET pPRG=%%B\
:: ¶ CREATE EVERYTHING.INI
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SET "pFAV1=%pFAV:\=\\%"
SET "pPIC1=%pPIC:\=\\%"
SET "pMUS1=%pMUS:\=\\%"
SET "pVID1=%pVID:\=\\%"
SET "pDSK1=%pDSK:\=\\%"
SET "pPER1=%pPER:\=\\%"
SET "pDWN1=%pDWN:\=\\%"
SET "pGAM1=%pGAM:\=\\%"
SET "pSUS1=%pSUS:\=\\%"
SET "pSCS1=%pSCS:\=\\%"
SET "pNET1=%pNET:\=\\%"
SET "pSND1=%pSND:\=\\%"
SET "pPRG1=%pPRG:\=\\%"
CALL>NO_ALPHA_INSTANCE
CALL>Everything.ini
(
ECHO [Everything]
:: disable program showing
ECHO view=0
ECHO show_tray_icon=0
ECHO show_in_taskbar=0
ECHO bring_into_view=0
:: disable unnecessary operations
ECHO load_delay=0
ECHO check_for_updates_on_startup=0
ECHO beta_updates=0
ECHO debug=0
ECHO debug_log=0
ECHO verbose=0
:: disable unnecessary data
ECHO floppy_disk_volumes=0
ECHO find_mount_points_on_removable_volumes=0
ECHO scan_volume_drive_letters=0
ECHO icons=0
ECHO thumbnails=0
ECHO filelist_icons=0
ECHO filelist_thumbnails=0
ECHO auto_include_fixed_volumes=0
ECHO auto_include_fixed_fat_volumes=0
ECHO auto_include_fixed_ntfs_volumes=0
ECHO auto_include_fixed_refs_volumes=0
ECHO auto_include_remote_volumes=0
ECHO auto_include_removable_volumes=0
ECHO auto_include_removable_fat_volumes=0
ECHO auto_include_removable_refs_volumes=0
ECHO auto_remove_moved_fat_volumes=0
ECHO auto_remove_moved_ntfs_volumes=0
ECHO auto_remove_moved_refs_volumes=0
ECHO auto_remove_offline_fat_volumes=0
ECHO auto_remove_offline_ntfs_volumes=0
ECHO auto_remove_offline_refs_volumes=0
ECHO auto_remove_offline_remote_volumes=0
ECHO index=0
ECHO index_attributes=0
ECHO index_date_accessed=0
ECHO index_date_created=0
ECHO index_date_modified=0
ECHO index_folder_size=0
ECHO index_recent_changes=0
ECHO index_size=1
ECHO fast_attributes_sort=0
ECHO fast_date_accessed_sort=0
ECHO fast_date_created_sort=0
ECHO fast_date_modified_sort=0
ECHO fast_extension_sort=0
ECHO fast_size_sort=0
:: making a list of inclusions
ECHO folder_subfolders=1
ECHO ntfs_volume_includes=1
ECHO ntfs_volume_paths=A:,B:,C:,D:,E:,F:,G:,H:,I:,J:,K:,L:,M:,N:,O:,P:,Q:,R:,S:,T:,U:,V:,W:,X:,Y:,Z:
ECHO ntfs_volume_include_onlys=^"%pFAV1%,%pPIC1%,%pMUS1%,%pVID1%,%pDSK1%,%pPER1%,%pDWN1%,%pGAM1%,%pSUS1%,%pSCS1%,%pNET1%,%pSND1%,%pPRG1%^"
:: making a list of exceptions
ECHO exclude_list_enabled=1
ECHO exclude_hidden_files_and_folders=0
ECHO exclude_system_files_and_folders=0
ECHO exclude_folders="C:\\Program Files","C:\\Program Files (x86)","C:\\ProgramData","C:\\Windows"
)>Everything.ini
:: ¶ CALC FOLDERS
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SET "spaces= "
SET "delimiter=~"
START Everything.exe -config %CD%\Everything.ini -nodb -startup -monitor-pause
ECHO --------------------------------------
ECHO Folder sizes for %Username% in bytes:
ECHO --------------------------------------
SET "name=shell:Favorites" && for /F "delims=" %%a in ('es.exe %pFAV% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
SET "name=shell:My Pictures" && for /F "delims=" %%a in ('es.exe %pPIC% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
SET "name=shell:My Music" && for /F "delims=" %%a in ('es.exe %pMUS% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
SET "name=shell:My Video" && for /F "delims=" %%a in ('es.exe %pVID% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
SET "name=shell:Desktop" && for /F "delims=" %%a in ('es.exe %pDSK% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
SET "name=shell:Personal" && for /F "delims=" %%a in ('es.exe %pPER% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
SET "name=shell:Downloads" && for /F "delims=" %%a in ('es.exe %pDWN% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
SET "name=shell:SavedGames" && for /F "delims=" %%a in ('es.exe %pGAM% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
SET "name=shell:Startup" && for /F "delims=" %%a in ('es.exe %pSUS% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
SET "name=shell:Common startup" && for /F "delims=" %%a in ('es.exe %pSCS% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
SET "name=shell:NetHood" && for /F "delims=" %%a in ('es.exe %pNET% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
SET "name=shell:SendTo" && for /F "delims=" %%a in ('es.exe %pSND% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
SET "name=shell:Programs" && for /F "delims=" %%a in ('es.exe %pPRG% -get-total-size -timeout 60000') do (set size=%%a) && CALL :formatout
ECHO --------------------------------------
Everything.exe -exit
ERASE Everything.ini 1>NUL 2>&1
ERASE Plugins.ini 1>NUL 2>&1
ERASE NO_ALPHA_INSTANCE 1>NUL 2>&1
:: ¶ END TIMING
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SET _time=%time%
SET /a _hours=100%_time:~0,2%%%100,_min=100%_time:~3,2%%%100,_sec=100%_time:~6,2%%%100,_cs=%_time:~9,2%
SET /a _duration=_hours*60*60*100+_min*60*100+_sec*100+_cs-_started
SET /a _hours=_duration/60/60/100,_min=100+_duration/60/100%%60,_sec=100+(_duration/100%%60%%60),_cs=100+_duration%%100
ECHO Elapsed time (hh:mm:ss.ms): %_hours%:%_min:~-2%:%_sec:~-2%.%_cs:~-2%
ECHO.
PAUSE
GOTO :eof
:: ¶ SERVICE UNIT
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:formatout
CALL :padright name 20
CALL :padleft size 15
ECHO %name% %delimiter% %size%
GOTO :eof
:padright
CALL SET padded=%%%1%%%spaces%
CALL SET %1=%%padded:~0,%2%%
GOTO :eof
:padleft
CALL SET padded=%spaces%%%%1%%
CALL SET %1=%%padded:~-%2%%
GOTO :eof
Комплект тут, запустить CalcFolders3.cmd.
PS: David Carpenter (автор Everything) опубликовал предыдущую версию скрипта тут, можно присоединиться к обсуждению.


Последний раз редактировалось: Hunter23071985 (2021-09-05 14:53), всего редактировалось 5 раз(а)

[Цитировать]

    KaSpieC 666
  • 260
  • Стаж: 9 лет 2 месяца
  • Сообщений: 787
  • Репутация:127

    [+] [-]
  • Откуда: Одесса
conty9,
Какие-то у меня неудачные знакомства с программой всё время.
То нечаянно удалил всё с рабочего стола (хотел увидеть как работает прога), потом всё время отображалась в программе папка Downloads на диске Е (хотя есть папка на диске С).
Теперь:
папка Downloads в программе отображается на пути E:\\Downloads
при нажатии на путь в программе E:\\Downloads, открывается в проводнике Этот компьютер>Документы (хотя папка в профиле Загрузки - есть).
в проводнике, папка E:\Downloads переименовалась в Загрузки и вместо значка папки - теперь стрелочка)))
Я конечно не эксперт, но мне кажется, что прога меня не любит ak

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
KaSpieC 666, запусти regedit.exe, перейди в [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders], исправь значение {374DE290-123F-4565-9164-39C4925E467B} на C:\Downloads. А в папке E:\Downloads просто нужно исправить desktop.ini, или его удалить - тогда папка будет показана как обычная.
Проводник папку E:\\Downloads открыть не может, поэтому открывает то, что знает - документы (он всегда так поступает, если путь неверен). А откуда у тебя взялись два \\ - загадка.
Ну и удалить всё с рабочего стола, как я уже писал, можно только таким способом: перенести раб.стол на другой диск с удалением оригинала, а потом на другом диске грохнуть перенесённый рабочий стол. Потому что сама утилита принимает изменения в пути категории и удаляет данные исключительно при успешном завершении копирования.

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1284
  • Репутация:126

    [+] [-]
conty9, может перед удалением источника сделать сообщение? Так безопасней.
"Удалить источник для завершения операции перемещения?" Кнопки Да Нет.
По поводу размера проверь скорость работы моей проги поиска дубликатов. Когда в строке состояния поиск файлов это время на формирование поиска и получения размеров, но там еще сортировка и формирование списка это можно считать как сложение чисел вот столько времени затрачивает прога на поиск файлов и размеров. Для интереса сам проверю после работы. Что на автоите что на пурике можно проверить однотипными прогами. И на проге синхронизации папок можно проверить. И на проге которая выдает список размеров папок.
Можно написать как dll если pecmd поддерживает.

Комментарий от Гость


Источник по-умолчанию не удаляется, удаляется только, если установлена птичка "удалять после успешного копирования". Так что нужно очень постараться, чтобы удалить свои данные.
По поводу получения размера: PECMD и сам умеет получать размер. С тем же успехом, что и diruse.exe, или FAR/TC, т.е., с той же скоростью. diruse.exe я использовал только потому, что с внешней утилитой я могу прервать слишком длительный процесс взвешивания (PECMD не может прервать собственную команду).
Все обычные варианты (что автоит, что пурик) дадут тот же результат, если взвешивать стандартными методами. Everything это делает нестандартно, когда-то я об этом читал, но точно не помню. То ли альтернативные потоки NTFS, то ли что ещё.
А в общем и целом, у меня нашлось только две папки, где User2Go не успевает получить размер, и там просто свалка кучи файлов.

[Цитировать]

    xowlet
  • 1024
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 179
  • Репутация:11

    [+] [-]
87967conty9,
... мне кажется, что прога меня не любит ak
Прога хорошая, ay кнопок много! ac

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1284
  • Репутация:126

    [+] [-]
conty9, если есть желание я могу попробовать скомпилировать запуск WinAPI-функцию для копирования с прогрессом. Я помню что использовал её где-то и поискал скрипты и именами "Copy", нашёл _CopyWithProgress.au3, поискал упоминание функции в своих скриптах, и нашёл в скрипте синхронизации, там конструкция такова, что если копируется файл размером больше 10 Мб, то он копируется с использованием этого функционала (с прогрессом). Внутри вызов WinAPI-функции: SHFileOperation, погулил её на форуме PureBasic, и она там есть. То есть я могу скомпилировать exe файл для передачи ему двух путей.

Комментарий от Гость


Можно попробовать. Вообще, у меня давно было желание написать полноценный GUI копирования на PECMD.

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1284
  • Репутация:126

    [+] [-]
Скачать wincopy: yandex upload.ee (готовый результат, исходник в комплекте).
Ком-строка: wincopy.exe "исходный_путь" "путь_назначения". Если процесс копирования является длительным, примерно более 2-3 секунд, то появляется окно прогресса копирования.
Ранее проблему вызывала функция CheckPath(), хоть и логически она написана правильно с использованием сторонних функций. Но легко отказался от неё из-за того, что WinAPI функция сама содержит проверку всего и вся.
Перезалил, подправил возврат ошибок


Последний раз редактировалось: AZJIO (2021-08-15 08:07), всего редактировалось 2 раз(а)

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1284
  • Репутация:126

    [+] [-]
conty9
Это чисто виндовая функция, я не могу в неё что-то добавить. Хотя и можно было бы создать аналоги типа ранее известных 2- прог, которые показывают общую полосу прогресса и отдельно для очередного файла. Но мне кажется средствами винды это знак качества, это как будто мышкой перенести папку из одной директории в другую. Там есть константы (в начале скрипта), 4 константы операции и остальные поведение. Автором функции изначально было заложены константы
#FOF_NOCONFIRMMKDIR - создавать папку если требуется без вопросов у пользователя
#FOF_NOCONFIRMATION - отвечать всегда ДА на любые окна (заменить)
#FOF_NOERRORUI - подавлять сообщения об ошибках.
В общем поведение можно задать флагами, а они указаны в описании функции (в гугле можно найти, вот)

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
AZJIO, я, кажется, понял, как можно сильно ускорить процесс получения размера папки (хоть пока и не знаю, как это реализовать). Суть в том, что нужно получать не сумму всех размеров файлов, а суммарное занимаемое ими место. Файл самого минимального размера всегда занимает один кластер. В MFT хранится инфа, где хранится каждый файл и сколько кластеров он занимает. Так что вполне достаточно прочитать MFT и проанализировать его на количество занимаемых файлами кластеров. А вот, чтобы получить суммарное место, приходится читать атрибуты для каждого файла (только это не те атрибуты, к которым привыкли мы) из скрытого потока, где указана его длина. Поэтому в таком случае время обработки прямо зависит от количества файлов, приходится перечитывать для каждого файла его поток (это скрытый системой файл).

[Цитировать]

    xowlet
  • 1024
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 179
  • Репутация:11

    [+] [-]
После вдумчивого прочтения семи страниц у меня родилось предложение, и мне хотелось бы услышать мнение специалистов и пользователей по нему.
Предлагаю реализовать два режима работы программы. Профессиональный, для специалистов, с возможностью тонкой настройки, в котором задействованы все возможности программы и облегчённый, для простых юзеров, с минимальным набором функций и количеством настроек.
В облегчённом режиме будет производится простое перемещение всех стандартных системных папок пользователя, от имени которого будет выполняться программа, при наличии свободного дискового пространства, необходимого для этого, в каталог, зеркально отражающий их исходную структуру. И будет всего три кнопки: - переключение режима (про/лайт), - отменить, - выполнить. aa

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
Версия 0.9.3.3.
Изменения:
1. Добавил индикацию размера категорий, если больше 1Гб - голубой, больше 10Гб - оранжевый, больше 100Гб - красный.
2. Поправил немного отображение целевых путей, если их размер не получен за 10сек. (когда слишком много файлов в целевой папке).
3. По мелочи разное.-Сегодня немного экспериментировал с различными программами, определяющими размер папок. Судя по скорости, только Everything и TreeSize Free (начиная с версии 3.0) работают напрямую с $MFT, что даёт отличную скорость получения размера папки. Только использовать их, увы, не получится. Возможно, подошла бы утилита ntfsdir, но она сильно платная. Причём даже проверить её работоспособность без покупки не получится, сразу говорит - нет лицензии и покеда. Когда-то вроде была бесплатной, но старых версий не найти.

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
Ну, раз жалоб нет, финальный релиз 1.0.0.1. По-сути, 0.9.3.3 с косметическими изменениями (перезалит 18.08.2021).


Последний раз редактировалось: Гость (2021-08-18 17:34), всего редактировалось 5 раз(а)

[Цитировать]

    Hunter23071985
  • 874
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 173
  • Репутация:6

    [+] [-]
88034Судя по скорости, только Everything и TreeSize Free (начиная с версии 3.0) работают напрямую с $MFT, что даёт отличную скорость получения размера папки. Только использовать их, увы, не получится.
conty9, добрый день!
Почему не получится - чем не устроил этот вариант поиска размера папок?
Добавил в пост батник, попробуйте...

[Цитировать]

    Гость
  • Репутация:0

    [+] [-]
Hunter23071985, просто не люблю нерациональное использование микроскопа в качестве молотка.
Впрочем, сделал вариант для тестов, v.1.0.0.2.

Страница 3 из 5


Показать сообщения:    

Текущее время: 25-Апр 23:18

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы