Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 8

Автор: ComradG
Дата сообщения: 03.07.2010 21:34
wolf0425

Цитата:
у тебя откровенное непонимание того, для чего придуман start /b

На то ведь есть ты

Цитата:
хочется скрыть окно просцесса

Да не хочется вовсе. А про

Цитата:
или через vbs

я как раз упомянул в посте выше.
И потом я просил идей вообще подкинуть. А то уже от VBScript'a, что пишу Wu Tangu малость крыша едет. Да и шум от победы немцев покоя не дает. Подкин задач на батах?

Добавлено:

Цитата:
мне для этого всего хватает правого Win

Каждому свое
Автор: lorents
Дата сообщения: 04.07.2010 12:22
Подскажите, пожалуйста, почему у меня кириллица отображается правильно, а у других людей символами

[more=ImageOptimizer.bat]
Код:
@echo off
1>nul chcp 1251
TITLE ImageOptimizer 1.2.0.0 от 30.08.2010

echo Image Optimizer - сборник программ для оптимизации/сжатии картинок формата PNG и JPEG без потери качества, состоящий из следующих программ:
echo * AdvPng (входит в состав AdvanceComp 1.15 от 01.11.2005);
echo * DeflOpt 2.07 от 05.09.2007;
echo * Jhead 2.90 от 05.02.2010;
echo * Jpegtran (входит в состав Libjpeg 8b от 16.05.2010);
echo * OptiPng 0.6.4 от 15.03.2010;
echo * PngOut от 09.06.2010;
echo * PrePng от 17.05.10;
echo * Zlib 1.2.5 от 19.04.2010.

echo.
echo Авторы (lorents и res2001) не несут ответственность за работу данного приложения.
echo Вы используете данное приложение под свой страх и риск.

if not exist "%~dp0Docs\advpng.exe" set "nofile=AdvPng "
if not exist "%~dp0Docs\deflopt.exe" set "nofile=%nofile%DeflOpt "
if not exist "%~dp0Docs\jhead.exe" set "nofile=%nofile%Jhead "
if not exist "%~dp0Docs\jpegtran.exe" set "nofile=%nofile%Jpegtran "
if not exist "%~dp0Docs\optipng.exe" set "nofile=%nofile%OptiPng "
if not exist "%~dp0Docs\pngout.exe" set "nofile=%nofile%PngOut "
if not exist "%~dp0Docs\prepng.exe" set "nofile=%nofile%PrePng "
if not exist "%~dp0Docs\zlib.dll" set "nofile=%nofile%Zlib"
if defined nofile (
echo.
echo Приложение не смогло получить доступ к следующим файлам: %nofile%
echo Нажмите на Enter для выхода из приложения.
pause>nul
goto:eof
)

echo.
echo Скопируйте необходимые картинки или папки с картинками в папку "Images" и нажмите на Enter для продолжения.

pause>nul

setlocal ENABLEDELAYEDEXPANSION
set logfile=Images.csv
if not exist %logfile% echo File name;Original Size;Output Size;Change in Bytes;%% of Original>>%logfile%

:png
1>nul 2>nul dir /b /s /a-d Images\*.png || goto:jpeg

:loop1
echo.
set png=
echo Параметр оптимизации PNG - Interlace:
echo [1] Noninterlaced;
echo [2] Adam7 (Interlaced).
echo Если Вы не хотите оптимизировать картинки формата PNG, то, не вводя параметр оптимизации, нажмите на Enter.
set /p png="Укажите параметр оптимизации PNG и нажмите на Enter: "
if defined png if "%png%" neq "1" if "%png%" neq "2" (
echo.
echo Вы указали неправильное значение параметра оптимизации/сжатии картинок. & goto:loop1
)
if not defined png set png=100

:jpeg
1>nul 2>nul dir /b /s /a-d Images\*.jpg Images\*.jpeg Images\*.jpe && goto:loop2
if defined png goto :pngwork
echo.
echo Картинки формата PNG и JPEG в папке "Images" не обнаружены.
echo Нажмите на Enter для выхода из приложения.
pause>nul
goto:eof

:loop2
echo.
set jpeg=
echo Параметр оптимизации JPEG - Encoding Process:
echo [1] Optimized;
echo [2] Progressive;
echo [3] Progressive vs. Optimize (сравниваются по размеру картинки, полученные обоими методами сжатия, и выбирается файл с наименьшим размером).
echo Если Вы не хотите оптимизировать картинки формата JPEG, то, не вводя параметр оптимизации, нажмите на Enter.
set /p jpeg="Укажите параметр оптимизации JPEG и нажмите на Enter: "
if defined jpeg if "%jpeg%" neq "1" if "%jpeg%" neq "2" if "%jpeg%" neq "3" (
echo.
echo Вы указали неправильное значение параметра оптимизации/сжатии картинок. & goto:loop2
)

:pngwork
if not defined png goto :jpegwork
if %png%==1 goto:Noninterlaced
if %png%==2 goto:Adam7
goto:jpegwork

:Noninterlaced
echo Noninterlaced
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    set origsize=%%~zi
    "%~dp0Docs\prepng.exe" "%%~fi"
    call :pngopt "%%~fi"
    "%~dp0Docs\advpng.exe" -z -4 "%%~fi"
    "%~dp0Docs\deflopt.exe" "%%~fi"
    call :savelog "%%i" !origsize!
)
goto :jpegwork

:pngopt
"%~dp0Docs\optipng.exe" -i0 -zw32k -zc1-9 -zm1-9 -zs0-3 -f0-5 -full -force %1 > %temp%\png.log
for /f "delims==,IDAT tokens=5" %%i in (%temp%\png.log) do (
    set f=%%i
)
set f=%f:~1,1%
del %temp%\png.log
"%~dp0Docs\pngout.exe" /k0 /f%f% %1
exit /b

:Adam7
echo Adam7
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.png') do (
    set origsize=%%~zi
    "%~dp0Docs\prepng.exe" "%%~fi"
    "%~dp0Docs\optipng.exe" -i1 -zw32k -zc1-9 -zm1-9 -zs0-3 -f0-5 "%%~fi"
    "%~dp0Docs\advpng.exe" -z -4 "%%~fi"
    "%~dp0Docs\deflopt.exe" "%%~fi"
    call :savelog "%%i" !origsize!
)

:jpegwork
if not defined jpeg goto:eof
if %jpeg%==1 goto:Optimize
if %jpeg%==2 goto:Progressive
if %jpeg%==3 goto:Progressive_Optimize
goto:eof

:Optimize
echo JPEG - Optimize
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg Images\*.jpe') do (
    set origsize=%%~zi
    "%~dp0Docs\jpegtran.exe" -copy all -optimize -perfect "%%~fi" "%%~fi"
    "%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
    call :savelog "%%i" !origsize!
)
goto:eof

:Progressive
echo JPEG - Progressive
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg Images\*.jpe') do (
    set origsize=%%~zi
    "%~dp0Docs\jpegtran.exe" -copy all -progressive -perfect "%%~fi" "%%~fi"
    "%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
    call :savelog "%%i" !origsize!
)
goto:eof

:Progressive_Optimize
echo JPEG - Progressive vs. Optimize
for /f "delims=" %%i in ('dir /b /s /a-d Images\*.jpg Images\*.jpeg Images\*.jpe') do (
    set origsize=%%~zi
    "%~dp0Docs\jpegtran.exe" -copy all -progressive -perfect "%%~fi" "%%~dpni_pro.tmp"
    "%~dp0Docs\jpegtran.exe" -copy all -optimize -perfect "%%~fi" "%%~dpni_opt.tmp"
    call :compare "%%~dpni_pro.tmp" "%%~dpni_opt.tmp" "%%~fi" "%%~nxi"
    "%~dp0Docs\jhead.exe" -dc -de -di -dx -du "%%~fi"
    call :savelog "%%i" !origsize!
)
goto:eof

:compare
if %~z1 LSS %~z2 (
    DEL /F /Q %2
    DEL /F /Q %3
    REN %1 %4
) else (
    DEL /F /Q %1
    DEL /F /Q %3
    REN %2 %4
)
exit /b

:savelog
set /a "change=%~z1-%2"
set /a "perc=%~z1*100/%2"
echo %~nx1;%2;%~z1;%change%;%perc%>>%logfile%
exit /b
Автор: res2001
Дата сообщения: 04.07.2010 14:43
lorents

Цитата:
Подскажите, пожалуйста, почему у меня кириллица отображается правильно, а у других людей символами

Видимо шрифты в виндах кривые. Выставь для консоли Lucida Console, может поможет.
Автор: lorents
Дата сообщения: 04.07.2010 15:00
res2001
со шрифтами все нормально, я проверил на двух компах. вместо кириллицы, непонятные символы, а у меня все ок. попробуй у себя, пожалуйста
Автор: res2001
Дата сообщения: 04.07.2010 15:04
wolf0425

Цитата:
у тебя откровенное непонимание того, для чего придуман start /b

Ну просвети нас, неразумных. Я тож несколько страниц назад на эти грабли наступал
На сколько я понимаю start /b создает новый процесс, но вывод перенаправляет в текущее консольное окно. А если запуск происходит не из консоли, то окно консоли все равно создается куда и направляется вывод.
Короче, бардак получается конкретный, как ты и писал.
Не понимаю как при нескольких запущенных подобным образом процессов можно работать в консоли.
Видимо работа в этом случае и не подразумевается - запустил скрипт из которого создалось несколько процессов с помощью start /b, а потом следишь за выводом, пока они сами не завершаться.

Добавлено:
lorents
Попробовал - все ок! Батник сам тоже должен быть сохранен в 1251.
Автор: lorents
Дата сообщения: 04.07.2010 15:33
res2001
можешь скинуть свой batch?
Автор: wolf0425
Дата сообщения: 04.07.2010 16:52

Цитата:
Видимо работа в этом случае и не подразумевается - запустил скрипт из которого создалось несколько процессов с помощью start /b, а потом следишь за выводом, пока они сами не завершаться.
угу, типа того. а WinKey.exe от ComradG - он вообще-то ввод ловит и на Ctrl-C - молча завершается, так что иметь его в фоне в текущем окне, где ещё что-то делаешь... занимательно.
А вообще программка временами полезная, не вседа же годится запрещение кнопки "насмерть". Но я все-же скомпиленный noWinKey.exe себе в утилиты кинул, а не предоставленный ComradG генератор исходника с вызовом компилятора

lorents

Цитата:
со шрифтами все нормально, я проверил на двух компах.
принтскрин с неправильного компа выложи. чтобы видно было - и какой фонт там в настроках прописан и что за неправильные символы на экране.
ну или просто поищи тут батник, правящий настройки консолей - его несколько раз дорабатывали.
Автор: lorents
Дата сообщения: 04.07.2010 16:58
wolf0425



Добавлено:
а если конвертировать batch в exe, то это проблема решится с кириллицей?
Автор: Ex0dus
Дата сообщения: 04.07.2010 18:01
Есть многостраничный вордовский файл. Периодически в нем появляется строчка "TEST".
Как пронумеровать все эти строчки по порядку. Чтобы получилось:
TEST 1
....
TEST 2
....
TEST 3
и так далее.
Макросы, батники?
Автор: wolf0425
Дата сообщения: 04.07.2010 18:07
lorents
Цитата:
чтобы видно было - и какой фонт там в настроках прописан и что за неправильные символы на экране.
ну и где открытый диалог настроек фонта на принтскрине?

хотя и без него могу сказать, что фонт там - Терминал, а не люсида.

Цитата:
а если конвертировать batch в exe, то это проблема решится с кириллицей?
с чего бы это её решиться?
скомпиленный экзешник последовательно
- распаковывает из себя исходный текст батника
- запускает выполнение батника обычным способом
- по закрытии cmd.exe - удаляет распакованный батник и, возможно, другие временные файлы.
в настройки фонта консоли юзера - запускальщик не лазит, ему это незачем.
ищи по сранице для печати последнюю версию батника "кракозябрам нет"...

Ex0dus
Цитата:
многостраничный вордовский файл. Периодически в нем появляется строчка "TEST". Как пронумеровать
а какой смысл в раздел батников такой вопрос писать? пиши в раздел ворда - там может объяснят как на вордбейсике нумерацию сделать, или как пометить все такие строки стилем с полем автонумерации.
Автор: lorents
Дата сообщения: 04.07.2010 18:31
wolf0425
Вот этот

Код: @echo off
chcp 1251>nul
title Я прога

"%CD%\reg.exe" query "HKCU\Console" /s|findstr /i /r FaceName.*Terminal 1>nul && (

for /f "delims=" %%A in ('""%CD%\reg.exe" query "HKCU\Console"" ^|findstr /b /i /r HKEY_CURRENT_USER\\Console\\.') do "%CD%\reg.exe" delete "%%~A" /f

"%CD%\reg.exe" add "HKCU\Console" /v FontSize /t REG_DWORD /d 1048576 /f
"%CD%\reg.exe" add "HKCU\Console" /v FontFamily /t REG_DWORD /d 54 /f
"%CD%\reg.exe" add "HKCU\Console" /v FontWeight /t REG_DWORD /d 400 /f
"%CD%\reg.exe" add "HKCU\Console" /v FaceName /t REG_SZ /d "Lucida Console" /f

start "" "%~f0" %* & exit

) 1>nul

:begin
echo Кракозябрам нет!

pause
exit
Автор: ComradG
Дата сообщения: 04.07.2010 18:39
wolf0425, что у тебя за тупая мания нет-нет, но оплевать человека:

Цитата:
а не предоставленный ComradG генератор исходника с вызовом компилятора

Но ведь

Цитата:
А вообще программка временами полезная, не вседа же годится запрещение кнопки "насмерть". Но я все-же скомпиленный noWinKey.exe себе в утилиты кинул

Ты бы спасибо сказал, что я вообще это написал.
Ладно, благодарности искать все равно, что в лужу пер... ну, просто в лужу.
res2001 или wolf0425, кто из вас говорил о параметризации vbs зипующей/анзипующей через системный шелл? Я тут поднапрягся, повспоминал школьные уроки по Visual Basic и написал вот такую vbs-ку, которую можно юзать через батники.

Добавлено:
Ex0dus
Макросы. Через батники можно лешиться шаров

Добавлено:
Эй, куда все сдристнули?
Автор: wolf0425
Дата сообщения: 04.07.2010 20:19
lorents
Цитата:
код сам безопасный?
код полностью сносит все ранее сделанные (кривые) настройки консольных окон, после чего правит параметры по умолчанию. Т.е. если среди индивидуальных настроек консолей были нужные, где фонт действительно должен отличаться от дефолтного - придется настраивать заново. ни у меня ни у заказчика кода - таких не было


Цитата:
что у тебя за тупая мания нет-нет, но оплевать человека:
подкрась цветом в каком слове я тебя там оплевал то?
может у тебя мания или просто глюки на почве недопередоза лекарств?


Цитата:
Ты бы спасибо сказал, что я вообще это написал.
ну так как лично мне оно пока не понадобилось, а все предыдущие случаи я как-то обходился без неё (и это даже требовало памяти на несколько мегабайт меньше) - то пока подождешь. случится с пользой применить - скажу, не волнуйся.
пока же только спасибо за само напоминание что в .НЕТ входит компилятор, я больше изврату с генерацией+компиляцией порадовался, чем произведенному с его помощью экзешнику.

а зиповалку я попозже посмотрю...
Автор: lorents
Дата сообщения: 04.07.2010 20:30
wolf0425
решил поставить кодировка 866, как было, так все норамально работает
но теперь проблема с отчетом, как можно это исправить, т.е. поменять кодировку (866) именно в отчете?
Автор: wolf0425
Дата сообщения: 04.07.2010 21:14

Цитата:
решил поставить кодировка 866, как было, так все норамально работает
да оно и в 1251 работает не менее нормально, если система настроена на нормальный фонт



Цитата:
поменять кодировку (866) именно в отчете?
в смысле с 866 на 1251?
в подпрограмме печати отчета - в начале 1>nul chcp 1251 и перед выходом 1>nul chcp 866
я правильно понимаю что отчет печатает :savelog ?

Автор: lorents
Дата сообщения: 04.07.2010 21:26
wolf0425

Цитата:
я правильно понимаю что отчет печатает :savelog ?

да, именно
так надо, у меня просто не работает

Код: :savelog
1>nul chcp 1251
set /a "change=%~z1-%2"
set /a "perc=%~z1*100/%2"
1>nul chcp 866
echo %~nx1;%2;%~z1;%change%;%perc%>>%logfile%
exit /b
Автор: wolf0425
Дата сообщения: 04.07.2010 22:59
ты обратно наверно рано переключил
Код: :savelog
1>nul chcp 1251
set /a "change=%~z1-%2"
set /a "perc=%~z1*100/%2"
echo %~nx1;%2;%~z1;%change%;%perc%>>%logfile%
1>nul chcp 866
exit /b
Автор: lorents
Дата сообщения: 04.07.2010 23:12
wolf0425
Вроде получилось, спасибо

Добавлено:
Тут одна проблема возникла, если я использую кодировку 866, то пути файлов которые отображает программы, отображаются симсолами
как это можно исправить?
Автор: res2001
Дата сообщения: 05.07.2010 07:59
lorents

Цитата:
Тут одна проблема возникла, если я использую кодировку 866, то пути файлов которые отображает программы, отображаются симсолами

А где скрипт отображает пути? В savelog только имена файлов и числовые значения.
Файловая система имена хранит в 1251, поэтому действуй так же как и в savelog, перед выводом меняешь на 1251, выводишь, меняешь назад. Но это изврат.
Воспользуйся советом wolf0425 примени в начале батник изменяющий настройки консоли, и весь батник делай в 1251.


Добавлено:
ComradG

Цитата:
vbs зипующей/анзипующей через системный шелл

Чё та не работает скрипт на упаковку: "Объект не поддерживает это свойство или метод IE.REadyState" в 47 строке.
У меня 8 ишак.

Слушь, ты когда тестировал эту vbsку, не пробовал вариант без fso.CreateTextFile(ZIPfile, false).Write ZIPHeader
Неужто винда сама догадаться не может, что в зип файл надо зип заголовок записать?
Что будет, если просто создать зип нулевой длинны? и попытаться туда закинуть несколько файлов.

Интересно, какие еще фокусы можно делать с помощь NameSpace и объекта Shell.Application. В доке толком ничего не написано.
Похоже что любую надстройку над проводником, которая позволяет представлять некие объекты как папки можно использовать по тому же принципу.

Добавлено:
All
Разбираю почтовые файлы экспортированные из Batа.
Некоторые поля закодированы в BASE64.
Есть ли способ раскодировать из base64 без использования сторонних приблуд?
Автор: giv5dot26
Дата сообщения: 05.07.2010 09:56
Здравствуйте. Можно ли решить такую задачу: есть файл в нем пять столбцов с данными, необходимо выписывать значения крайнего правого? Если нужен файл для примера могу залить.
Автор: mugil_cephalus
Дата сообщения: 05.07.2010 10:01
res2001

Цитата:
без использования сторонних приблуд?

vbs'om ?

Добавлено:
Ex0dus
спроси здесь - http://forum.ru-board.com/topic.cgi?forum=33&bm=1&topic=5312#1
Автор: ComradG
Дата сообщения: 05.07.2010 10:10
res2001
А паковал как? Там синтаксис описан, так что, надо думать все по интрукции делал:

Код: cscript zip.vbs -a x:\zipfile.zip x:\dir
Автор: res2001
Дата сообщения: 05.07.2010 10:34
mugil_cephalus

Цитата:
vbs'om ?

можно и vbs

Добавлено:
ComradG

Цитата:
А паковал как? Там синтаксис описан, так что, надо думать все по интрукции делал:

Да паковал как надо.
Автор: ComradG
Дата сообщения: 05.07.2010 10:38
res2001

Цитата:
можно и vbs

Вы с mugil_cephalus о чем это. Может я на что сгожусь.

Добавлено:

Цитата:
Да паковал как надо.

Я писал в самом скрипте, что он еще в разработке, так что СПАСИБО за указание на баг!
Автор: res2001
Дата сообщения: 05.07.2010 10:41
giv5dot26

Цитата:
Здравствуйте. Можно ли решить такую задачу: есть файл в нем пять столбцов с данными, необходимо выписывать значения крайнего правого? Если нужен файл для примера могу залить.

for /f "tokens=5" %%a in (file.txt) do echo %%a
Кинешь пример файла, напишу подробнее.

Добавлено:
ComradG

Цитата:
Я писал в самом скрипте, что он еще в разработке, так что СПАСИБО за указание на баг!

Это я заметил, так что пожалуйста

Цитата:
Вы с mugil_cephalus о чем это. Может я на что сгожусь.

я выше спрашивал про кодирование в/из base64. Пока интересует больше раскодирование, но думаю и кодирование пригодится.
В винде судя по всему по умолчанию ничего такого нет, сторонние приблуды, ессно, есть.
Может как-то на vbs это сделать возможно?
Автор: ComradG
Дата сообщения: 05.07.2010 10:53
res2001
Я тебе и говорил спасибо!

Цитата:
Может как-то на vbs это сделать возможно?

Нет ничего невозможного. Но что-то мне подсказывает, что сие реализовывать лучше на жабаскрипте, а не вася-сценарии (в плане компактности кода). Хотя попробую. Правда не уверен в успехе сего предприятия, так что обещать ничего не буду.

Добавлено:
Кстати, res2001, а как на счет использования в батниках он-лайн (де)кодеров в base64?
Автор: giv5dot26
Дата сообщения: 05.07.2010 11:01
res2001
Файл выложить не получилось поэтому тут выкладываю чать файла


Цитата:

1 05.07.2010 04:02:16.126 05.07.2010 11:02:16.126 5016,2
2 05.07.2010 04:02:17.126 05.07.2010 11:02:17.126 5023,1
3 05.07.2010 04:02:18.126 05.07.2010 11:02:18.126 5032,4
4 05.07.2010 04:02:19.126 05.07.2010 11:02:19.126 5032,40
5 05.07.2010 04:02:20.126 05.07.2010 11:02:20.126 5025,46
6 05.07.2010 04:02:21.126 05.07.2010 11:02:21.126 5039,3
7 05.07.2010 04:02:22.126 05.07.2010 11:02:22.126 5055,5
8 05.07.2010 04:02:23.126 05.07.2010 11:02:23.126 5025,4
9 05.07.2010 04:02:24.126 05.07.2010 11:02:24.126 5016,20
10 05.07.2010 04:02:25.126 05.07.2010 11:02:25.126 5043,9
11 05.07.2010 04:02:26.126 05.07.2010 11:02:26.126 5048,6

вот значения последних столбцов (5016,2) нужно скопировать в другой файл.
Автор: res2001
Дата сообщения: 05.07.2010 11:07
giv5dot26
дык это 6ой столбец.
Вобщем та команда что я тебе написал вполне подходит для этого файла, только номер столбца поправить:

Код: for /f "tokens=6" %%a in (file.txt) do >out.txt echo %%a
Автор: ComradG
Дата сообщения: 05.07.2010 11:07
res2001
Вот тебе ссылки на
онлайн-декодер
и
онлайн-(де)кодер
а я попробую сейчас чего-нить забацать сам.
Автор: res2001
Дата сообщения: 05.07.2010 11:12
ComradG
он-лайн не катит.
Скрипт будет работать на серванте без доступа к нету.
Собственно, можно с этих сайтов выдернуть скрипт перекодировки.
JS меня вполне устроит, я, собственно, его предпочитаю больше чем vbs.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.