BorlandIMHO
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Linksach Задача озаглавлена "разгребаем помойку". GarbageSorter.cmd Код: set "GARBAGE=x:\path to\Garbage" set "SORTEDGARBAGE=y:\another path to\SortedGarbage" pushd "%SORTEDGARBAGE%" && popd ||exit pushd "%GARBAGE%" ||exit for /f "delims=" %%N in ('dir /b /a:-D *.*') do call :PROCESSIT "%%N" popd goto :EOF :PROCESSIT for /f "tokens=4,5" %%A in ('7z.exe l "%~1" ^|find /i "%~n1"') do ( set /a COMPRESSEDSIZE=%%B set /a UNCOMPRESSEDSIZE=%%A ) md "%SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)" move "%~1" "%SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)\" goto :EOF | Первые две команды задают пути к помойке (месту, где валяются архивы; предполагается, что кроме архивов там больше нет ничего) и сортированной помойке (папке, в которой создаются подпапки с именами, содержащими размеры, в которые, в свою очередь, перемещаются файлы с помойки). Таки да, напоминаю: к переменной окружения "PATH" необходимо добавить путь к 7z.exe (";c:\Program files\7-zip" в конце строки, без кавычек, в предположении что 7-zip установлен по стандартному пути). Проверено на тестовой помойке из ~250 архивов. Работает... (более поздний вариант; с "защитой от дурака" и обработкой ошибок) GarbageSorter2.cmd Код: @echo off 1>nul 2>&1 7z --help ||call :ABORT "Недоступен 7z.exe!" set "GARBAGE=x:\path to\Garbage" set "SORTEDGARBAGE=y:\another path to\SortedGarbage" 1>nul 2>&1 pushd "%SORTEDGARBAGE%" && popd ||call :ABORT "Папка "%SORTEDGARBAGE%" не существует!" 1>nul 2>&1 pushd "%GARBAGE%" ||call :ABORT "Папка "%GARBAGE%" не существует!" for /f "delims=" %%N in ('dir /b /a:-D *.*') do call :PROCESSIT "%%N" set "GARBAGE=" set "SORTEDGARBAGE=" popd goto :EOF :PROCESSIT for /f "tokens=4,5" %%A in ('7z.exe l "%~1" ^|find /i "%~n1"') do ( set /a COMPRESSEDSIZE=%%B set /a UNCOMPRESSEDSIZE=%%A ) md "%SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)"||call :ABORT "Невозможно создать папку %SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)!" move "%~1" "%SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)\"||call :ABORT "Невозможно переместить %~1 в %SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)!" set COMPRESSEDSIZE= set UNCOMPRESSEDSIZE= goto :EOF :ABORT echo Аварийное завершение работы! echo %~1 pause exit | (вариант в полпятого утра с пересчётом в кило, мега- и гигабайты) GarbageSorter3.cmd Код: @echo off 1>nul 2>&1 7z --help ||call :ABORT "Недоступен 7z.exe!" set "GARBAGE=x:\path to\Garbage" set "SORTEDGARBAGE=y:\another path to\SortedGarbage" 1>nul 2>&1 pushd "%SORTEDGARBAGE%" && popd ||call :ABORT "Папка "%SORTEDGARBAGE%" не существует!" 1>nul 2>&1 pushd "%GARBAGE%" ||call :ABORT "Папка "%GARBAGE%" не существует!" for /f "delims=" %%N in ('dir /b /a:-D *.*') do call :PROCESSIT "%%N" popd goto :EOF :PROCESSIT for /f "tokens=4,5" %%A in ('7z.exe l "%~1" ^|find /i "%~n1"') do ( set /a COMPRESSEDSIZE=%%B set /a UNCOMPRESSEDSIZE=%%A ) setlocal ENABLEDELAYEDEXPANSION call :RECALC COMPRESSEDSIZE call :RECALC UNCOMPRESSEDSIZE md "%SORTEDGARBAGE%\%~n1 !UNCOMPRESSEDSIZE! (!COMPRESSEDSIZE!)"||call :ABORT "Невозможно создать %SORTEDGARBAGE%\%~n1 !UNCOMPRESSEDSIZE! (!COMPRESSEDSIZE!)!" move "%~1" "%SORTEDGARBAGE%\%~n1 %UNCOMPRESSEDSIZE% (%COMPRESSEDSIZE%)\"||call :ABORT "Невозможно переместить %~1 в %SORTEDGARBAGE%\%~n1 !UNCOMPRESSEDSIZE! (!COMPRESSEDSIZE!)!" endlocal goto :EOF :ABORT echo Аварийное завершение работы! echo %~1 pause exit :RECALC call set /a TEMPVAR=%%%1%% if %TEMPVAR% LSS 1024 ( set "%1=!TEMPVAR!b" ) else if %TEMPVAR% LSS 1048576 ( for /f %%X in ('c:\utils\calc Round^(%TEMPVAR%*100/1024^)') do set /a RESULT=%%X set "%1=!RESULT:~0,-2!.!RESULT:~-2!kb" ) else if %TEMPVAR% LSS 1073741824 ( for /f %%X in ('c:\utils\calc Round^(%TEMPVAR%*100/1048576^)') do set /a RESULT=%%X set "%1=!RESULT:~0,-2!.!RESULT:~-2!Mb" ) else if %TEMPVAR% LSS 1099511627776 ( for /f %%X in ('c:\utils\calc Round^(%TEMPVAR%*100/1073741824^)') do set /a RESULT=%%X set "%1=!RESULT:~0,-2!.!RESULT:~-2!Gb" ) else (for /f %%X in ('c:\utils\calc Round^(%TEMPVAR%*100/1099511627776^)') do set /a RESULT=%%X set "%1=!RESULT:~0,-2!.!RESULT:~-2!Tb" ) goto :EOF | Для пересчёта используется утилита Command Line Calculator. Предполагается, что она лежит в папке "c:\Utils", если у вас в другом месте - измените путь. P.S. Код довольно кривой, но, в принципе, рабочий. Если профи помогут с правильной расстановкой % и ! (используется ENABLEDELAYEDEXPANSION) - будет совсем неплохо.
| Всего записей: 2376 | Зарегистр. 12-10-2006 | Отправлено: 23:26 12-11-2016 | Исправлено: BorlandIMHO, 12:12 13-11-2016 |
|