Prog-Man, ну, вот — совсем другое дело. Итак, как мы видим, скрипт-болванка на самом деле работает. Только
обязательно переименуйте его из «Start.cmd» в какое-либо иное имя, отличное от имён внутренних команд, таких как start, dir и т.п. (а по-хорошему — отличное и от внешних, поскольку некоторые не утруждают себя в пакетных файлах добавлением расширений для исполняемых файлов; Вы добавляете — на это я обратил внимание).
Теперь наша задача разобраться со вставленным Вами кодом.
mp3packer.exe
Нет никакой нужды в принудительном задании числа threads параметром «--workers», поскольку явно сказано:
Цитата:
--workers #
Set the number of threads to use for -z processing. These workers will run in parallel with the rest of the program. 0 is a valid number, and corresponds to synchronous processing. The default is a function of the number of processors/cores the program detects, and will likely change in different versions of the program.
|
Убрал.
Писать «поверх» и без следов в виде резервного файла приложение не умеет (очевидно, сделано специально). Оставил работу со временной папкой, только теперь туда помещаются (и впоследствии удаляются) резервные копии файлов, а не оптимизированные файлы.
gifsicle.exe
Приложению было бы неплохо научиться предварительно проверять результат своей оптимизации, дабы после таковой не получались файлы большего размера, нежели оригинальные.
pngout.exe
Так и не понял, зачем Вы проделываете двойную оптимизацию над bmp-файлами — сначала как над bmp, затем повторно — как над png. Убрал.
В общем, примерно так:
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFolder=%~1
if not defined sSourceFolder (
echo Usage: %~nx0 ^<Source folder^>
exit /b 2
)
call :GetTemporaryName
if exist "%sSourceFolder%\." (
for /f "usebackq delims=" %%i in (
`@"%systemroot%\system32\mshta.exe" "javascript:try {with(new ActiveXObject('Scripting.FileSystemObject')) {GetStandardStream(1).Write(GetFolder('%sSourceFolder:\=\\%').Size)}};catch (e){};close();"`
) do set sPrevFolderSize=%%i
echo Previously size [!sPrevFolderSize!].
pushd "%sSourceFolder%"
if exist "%USERPROFILE%\Desktop\Util\." (
PATH %USERPROFILE%\Desktop\Util;%PATH%
md "%TemporaryName%"
rem Инициализация Секундомера
rem http://forum.oszone.net/post-2275768-8.html
"timemer.exe" my_backup start
rem Оптимизация JPG
rem jpegtran http://jpegclub.org/jpegtran/
for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d "*.jpg" "*.jpeg"`) do "jpegtran.exe" -optimize -progressive -copy none "%%~i" "%%~i"
rem Оптимизация MP3
rem mp3packer 2.04
for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d "*.mp3"`) do "mp3packer64.exe" -f -z -u "%%~i" "%TemporaryName%\%%~i"
2>nul del /f /q "%TemporaryName%\*.mp3"
rem Оптимизация GIF
rem gifsicle 1.87 9.Dec.2014 http://www.lcdf.org/gifsicle/
for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d "*.gif"`) do "gifsicle.exe" --batch --optimize=3 "%%~i"
rem Конвертирование BMP в PNG. Оптимизация PNG
rem PNGOUT http://advsys.net/ken/utils.htm
for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d "*.bmp" "*.png"`) do "pngout.exe" "%%~i"
for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d "*.png"`) do >"%TemporaryName%\%%~i" <"%%~i" "defluff.exe"
copy /y "%TemporaryName%\*.png" "*.png"
2>nul del /f /q "%TemporaryName%\*.png"
"DeflOpt.exe" "*.png"
rem Получаем время работы программы
"timemer.exe" my_backup view
for /f "usebackq delims=" %%i in (
`@"%systemroot%\system32\mshta.exe" "javascript:try {with(new ActiveXObject('Scripting.FileSystemObject')) {GetStandardStream(1).Write(GetFolder('%sSourceFolder:\=\\%').Size - !sPrevFolderSize!)}};catch (e){};close();"`
) do set sDifference=%%i
echo Difference after working is [!sDifference!].
rd /s /q "%TemporaryName%"
) else (
echo Can't find folder [%USERPROFILE%\Desktop\Util].
exit /b 2
)
popd
) else (
echo Can't find source folder [%sSourceFolder%].
exit /b 1
)
endlocal
exit /b 0
rem ==========================================================================
rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
setlocal enableextensions enabledelayedexpansion
:NextName
set sTempName=%temp%\temp%random%.tmp
if exist "%sTempName%" goto :NextName
set sProcName=%~0
endlocal & set %sProcName:~4%=%sTempName%
exit /b 0
rem ==========================================================================
Не стал делать проверок на существование каждой из утилит.
P.S. Поиски живой «DeflOpt.exe» доставили много незабываемой радости и чистого человеческого счастья
.