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

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

Автор: Maza Faka
Дата сообщения: 18.08.2007 10:05
euheny
А так же команда more отлично понимает unicode
Автор: MsdLamer
Дата сообщения: 18.08.2007 11:01
Здравствуйте. Есть вопрос.

Цитата:
@echo off
setlocal
set "sum=0.00"
for /f %%a in (1.txt) do call :math %%a
set /p=%sum%<nul>2.txt
goto :EOF
:math
set "first=%sum%"
set "second=%1"
for /f "delims=. tokens=1,2" %%a in ("%first%") do (set "int1=%%a" & set "frac1=%%b")
for /f "delims=. tokens=1,2" %%a in ("%second%") do (set "int2=%%a" & set "frac2=%%b")
echo frac1=%frac1%
echo frac2=%frac2%
if %frac1% LSS 10 set "frac1=%frac1:~-1%"
if %frac2% LSS 10 set "frac2=%frac2:~-1%"
set /a "fr_sum=frac1+frac2"
set /a "int_sum=int1+int2"
if %fr_sum% GTR 99 (
set /a "int_sum+=1"
set "fr_sum=%fr_sum:~1%"
)
set "sum=%int_sum%.%fr_sum%"


считает сумму чисел в файле с сотыми долями, но вот проблемка, начал складывать к примеру

1.00
1.05

результат получил 2.5 это же не верно, должно быть 2.05. Подскажите как исправить. Спасибо.
Автор: Maza Faka
Дата сообщения: 18.08.2007 11:46
MsdLamer
Ммм...далась тебе эта арифметика на бат-файлах, сказано же ведь было, что ком. строка Windows позволяет проводить простые арифметические вычисления, к чему такой изврат? Ведь есть для таких целей языки программирования!
Автор: 01MDM
Дата сообщения: 18.08.2007 12:26
MsdLamer

Попробуй

Код:
@echo off
set SUM=0.00

for /f %%i in ('dir /b ^*.txt') do (
    set file=%%i
    call:file_data
    call:math
    )
echo %SUM%
goto:eof

:file_data
for /f "tokens=1,2 delims=." %%i in ('echo %SUM%') do (
    set int_s=%%i
    set flo_s=%%j
    )
if "%flo_s:~0,1%"=="0" (set "flo_s=%flo_s:~1,1%")

::==========================================
:: Изменяемое условие поиска строки в файлах
::==========================================
for /f "tokens=2,3 delims=. " %%i in ('type %file% ^| findstr /l "sum:"') do (
    set int_a=%%i
    set flo_a=%%j
    )
::
::==========================================

if not defined flo_a (set "flo_a=0")
if %flo_a% lss 10 (set "flo_a=%flo_a%0")
if "%flo_a:~0,1%"=="0" (set "flo_a=%flo_a:~1,1%")
goto:eof

:math
set /a int_SUM=%int_s%+%int_a%
set /a flo_SUM=%flo_s%+%flo_a%

if %flo_SUM% geq 100 (
    set /a flo_SUM-=100
    set /a int_SUM+=1
    )

if %flo_SUM% lss 10 (
    set "flo_SUM=0%flo_SUM%"
    )

set "SUM=%int_SUM%.%flo_SUM%"
Автор: NIKZZZZ
Дата сообщения: 18.08.2007 12:28
MsdLamer
Задача по операциям над числами с фиксированной запятой сводится:
Преобразованию числа в целое.

Код: setlocal enabledelayedexpansion
for /f "delims=. tokens=1,2" %%a in ("%a%") do (
if "%%b"=="" (set "a=%%a00") else (set "tmp=%%b00" & set "a=%%a!tmp:~0,2!")
)
Автор: dominiksus
Дата сообщения: 18.08.2007 18:04
подскажите можно ли средствами винды конвертировать много файлов BMP в папке в JPG в ту же папку с такими точно именами файлов но только чтоб Жипег расширение было, а если не средствами виндоус, то если другой програмой (proga.exe), какова структура батфайла?
Автор: Maza Faka
Дата сообщения: 18.08.2007 18:25
dominiksus
Примерно так:

Код:
@echo off
for %%a in (*.bmp) do proga.exe "%%a" "%%~na".jpg
Автор: dominiksus
Дата сообщения: 18.08.2007 18:33
Maza Faka
утилита есть, convert, работает из ком. строки, так как ее конкретно присобачить если у нее такой вид запуска : convert file.bmp file.jpg ?
так будет правильно? :

Код: for %%a in (*.bmp) do convert "%%a" "%%~na".jpg
Автор: Maza Faka
Дата сообщения: 18.08.2007 18:48
dominiksus

Цитата:
так будет правильно?

Да, попробуй, для начала на паре файлов.

Нашёл я утилиту IrfanViewer, конвертит из ком. строки:

Код:
@echo off
for %%a in (C:\Test\*.bmp) do "%ProgramFiles%\IrfanView\i_view32.exe" "%%a" /convert="%%~dpna.jpg"
Автор: dominiksus
Дата сообщения: 18.08.2007 18:54
Maza Faka
спасибон, попробую
Автор: 19w85
Дата сообщения: 19.08.2007 14:47
Можно ли сделать отключение устройства (которое вручную можно сделать через "Диспетчер устройств") через командный файл?
Автор: Elroir
Дата сообщения: 19.08.2007 14:52
19w85
Можно. Один из способов - воспользоваться Майкрософтовской утилитой devcon - http://support.microsoft.com/kb/311272/ru
Автор: 19w85
Дата сообщения: 19.08.2007 15:59
Elroir
Огромное спасибо!
Целый час искал что-то подобное, так ничего и не нашел...

P.S. Маленький вопрос... в таком виде не работает:
devcon disable usb\vid_0915&pid_8104\5EC9BB (в кавычках тоже не работает)
devcon disable *vid_0915
devcon disable *5EC9BB

работает только в таком:
devcon disable *pid_8104

Достаточно только pid?

Автор: Elroir
Дата сообщения: 19.08.2007 16:59
19w85

Цитата:
Достаточно только pid?

Не уверен. Запусти команду "devcon find *pid_8104". Если в выданном списке будет только то, что тебе нужно - значит достаточно.
Автор: 19w85
Дата сообщения: 19.08.2007 17:37

Цитата:
Если в выданном списке будет только то, что тебе нужно - значит достаточно.

Да, в данном случае только одно устройство...

А вообще заставить искать по такому vid_0915&pid_8104 нельзя?
Автор: Elroir
Дата сообщения: 19.08.2007 18:34
19w85

Цитата:
А вообще заставить искать по такому vid_0915&pid_8104 нельзя?

У меня не получилось. Если без кавычек - мешает символ "&", если с кавычками - не находит.
Автор: 19w85
Дата сообщения: 19.08.2007 18:53
Elroir

Цитата:
У меня не получилось. Если без кавычек - мешает символ "&", если с кавычками - не находит.

Все, придумал...вот так работает, задействуя оба параметра:
devcon disable *vid_0915*pid_8104
Автор: king_stiven
Дата сообщения: 19.08.2007 19:50
У меня Аутпост ругается на пакет утилит HS_Packet из "Полезные утилиты" из шапки, находит два

19:48:10    Обнаружено объектов    Malware    Sexe Crypter
19:48:10    Обнаружено объектов    Malware    SynFlood

может просто принимает некоторые команды за вирус?
Автор: KapralBel
Дата сообщения: 19.08.2007 19:57
king_stiven
На какую утиль?
Автор: king_stiven
Дата сообщения: 19.08.2007 20:52
KapralBel
hs_echo SynFlood
hs_play Sexe Crypter

Does not threaten computers directly, but can be used to create viruses or Trojans, or to carry out illegal activities such as DoS attacks and breaking into other computers.

Не угрожает компьютерам непосредственно, но может использоваться, чтобы создать вирусы или Trojans, или выполнять незаконные действия типа нападений ДОСа и вторжения другие компьютеры.
Автор: KapralBel
Дата сообщения: 19.08.2007 22:25
king_stiven
У меня
04.12.2005 18:57 17 920 hs_echo.exe
04.12.2005 16:20 15 872 hs_play.exe

Каспер не ругается
Добавь в доверенную зону (или как она там называется)
Автор: Rotorina
Дата сообщения: 19.08.2007 23:28
В моём случае выполняются порядка 50-100 процессов.
Пока что смог написать батник, чтоб они выполнялись поочерёдно, но меня это не устраивает, т.к. каждый из процессов длиться 30сек-1мин, потом выполняется следующий.
Подскажите, как реализовать запус всех процессво одновременно? Какой ключ нужно использовать? Рассмотрим на примере:
ping aaaaa.com.ua
ping bbbbb.ru
ping cccccc.ru --- вот такой общий вид моего батника ))

И следом ещё вопрос: ниак не могу сделать цикл, а именно... - запустил батник, бежит определенное время на нём толко в обратном порядке.... по истечении времени выполняются эти команды.... как команды закончились - счётчик опять побежал... одним словом, цикл..
Автор: Elroir
Дата сообщения: 19.08.2007 23:50
Rotorina

Цитата:
Подскажите, как реализовать запус всех процессво одновременно?

Никак - это невозможно.


Цитата:
И следом ещё вопрос: ниак не могу сделать цикл

Примерно так:

Код:
:loop
call :delay
command1.exe
command2.exe
...
commandN.exe
goto loop
:delay
:: Пауза в 5 минут - используется утилита sleep.exe из Resource Kit-а
sleep.exe 300
Автор: Rotorina
Дата сообщения: 19.08.2007 23:58
Elroir, спасибо
Т.е. ускорить процесс невозможно? Пусть это будет не одновременно, но хотя бы не дожидаясь окончания выполнения одной команды, выполнять другую...

Есть ещё вариант: под каждую команду свой батник, который запускается из одно бат-файла, но это уже извращение... куча окон на экране...
Ваши предложения?

sleep.exe - шорошая штука, но наблюдал однажды у товарищей, как в командной строке бежало время "Ожидание ххх сек ...", по истечению которого запускался процесс. потом снова... Слиип это эффекта не даёт.
Автор: Elroir
Дата сообщения: 20.08.2007 00:08
Rotorina
Можно ускорить:

Код:
start /b ping aaaaa.com.ua
start /b ping bbbbb.ru
start /b ping cccccc.ru
...
Автор: NIKZZZZ
Дата сообщения: 20.08.2007 00:14
Rotorina

Цитата:
запус всех процессво одновременно?



Код: start /b ping www.google.ru >1.txt
start /b bbbbb.ru>2.txt
start /b cccccc.ru>3.txt
:_1
tasklist | find "ping">nul
if %errorlevel%==0 goto _1
Автор: Rotorina
Дата сообщения: 20.08.2007 00:15
Elroir, спасибо большое!
всё выполняется быстро, при этому ещё и работает через заданное время!
Один минус - пищалка разрывается, да и слух такого не выдерживает..
Можно ли программно отключить её?
Автор: Elroir
Дата сообщения: 20.08.2007 00:17
Rotorina

Цитата:
Один минус - пищалка разрывается, да и слух такого не выдерживает

Какая пищалка? Откуда звук???
Автор: Rotorina
Дата сообщения: 20.08.2007 00:25
NIKZZZZ

Код: start /b ping www.google.ru >1.txt
start /b bbbbb.ru>2.txt
start /b cccccc.ru>3.txt
:_1
tasklist | find "ping">nul
if %errorlevel%==0 goto _1
Автор: Elroir
Дата сообщения: 20.08.2007 00:31
Rotorina

Цитата:
Пищалка... с системника...

Вообще-то он не должен пищать...
Проверить не могу, так как у меня системный спикер отключен физически.
Да и не встречал я способа отключить системный спикер програмно.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: Автозагрузка терминальной сессии


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