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

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

Автор: soft111
Дата сообщения: 09.05.2010 21:37
Rush

Спасибо, именно это и было нужно, все работает
Автор: wolf0425
Дата сообщения: 09.05.2010 21:44
Mark_Titov
Цитата:
...подскажите как сделать в данной паузе задержку не 5 а 2 секунды?
для начала я подскажу что делать паузу так, как сделано в этом батнике - нежелательно в принципе.
потому как такой цикл вызывает полную загрузку процессора (ну или не всего проца, а одного ядра у многоядерного, но это тоже не айс)

юзай для пауз пинг и не изобретай велосипед.
например так:
1>nul 2>&1 ping 127.255.255.255 -n 1 -w 2000
2000 - это милисекунды, при желании поставишь сколько надо.




Автор: Mark_Titov
Дата сообщения: 09.05.2010 22:01
wolf0425

Цитата:
такой цикл вызывает полную загрузку процессора (ну или не всего проца, а одного ядра у многоядерного

...понял, не знал. Спасибо.

А пингом я и так пользуюсь, просто новый способ думал прикрутить на эту консоль.

Спасибо, за разъяснения...

us0r

Цитата:
Мне кажется ты пишешь троян на .bat- ах )))\

Ага, вирусописатель из меня как из коровы балерина )))...
Автор: METAJIJI
Дата сообщения: 09.05.2010 23:22
Добрые люди тыкнули носом вот в такой код:

Код: @Echo Off

CALL :REPLINE "file.ini" "Server_address=" "Server_address=192.1.1.1"
CALL :REPLINE "file.ini" "Server_port=" "Server_port=8080"

:REPLINE
If Not Exist "%~1" Exit /B 1
If Exist "%~dpn1.tmp" DEL /F/Q "%~dpn1.tmp"

Set $N=0& For /F "Delims=:" %%i In ('FindStr /BINRC:" *%~2" "%~1"') Do Set $N=%%i
If %$N% NEQ 0 For /F "Tokens=1* Delims=:" %%i In ('FindStr /ENRC:"$" "%~1"') Do If "%%i"=="%$N%" (
Echo %~3>>"%~dpn1.tmp" ) ELSE Echo.%%j>>"%~dpn1.tmp"

If Exist "%~dpn1.tmp" If Exist "%~1" DEL /F/Q "%~1"
If Exist "%~dpn1.tmp" REN "%~dpn1.tmp" "%~nx1"
Exit /B 0
Автор: wolf0425
Дата сообщения: 10.05.2010 00:35

Цитата:
работает изумительно! в файле размером 8Кб изменяются ~38 опций около 6-7 сек.!!!

а представь что это же делается за один вызов sed и работает менее секунды


Код: sed -e "s/^Server_address=.*$/Server_address=192.1.1.1/gi" -e "s/^Server_port=.*$/Server_port=8080/gi" <"file.ini" >"%temp%.\file.tmp"
move /y "%temp%.\file.tmp" "file.ini"
Автор: METAJIJI
Дата сообщения: 10.05.2010 00:45
Немного модифицировал код, теперь нет пробелов в конце строк, старый код добавлял пробелы

Код:
IF NOT EXIST "%~1" EXIT /B 1
IF EXIST "%~dpn1.tmp" DEL /F/Q "%~dpn1.tmp"

SET $N=0 & FOR /F "Delims=:" %%i IN ('FINDSTR /BINRC:" *%~2" "%~1"') DO SET $N=%%i
IF %$N% NEQ 0 FOR /F "Tokens=1* Delims=:" %%i IN ('FINDSTR /ENRC:"$" "%~1"') DO IF "%%i"=="%$N%" (
1>>"%~dpn1.tmp" ECHO.%~3) ELSE 1>>"%~dpn1.tmp" ECHO.%%j

IF EXIST "%~dpn1.tmp" IF EXIST "%~1" DEL /F/Q "%~1"
IF EXIST "%~dpn1.tmp" REN "%~dpn1.tmp" "%~nx1"
EXIT /B 0
Автор: Mark_Titov
Дата сообщения: 10.05.2010 06:12

Цитата:
Немного модифицировал код, теперь нет пробелов в конце строк, старый код добавлял пробелы

...А это вообще имеет большое значение? Если да, то почему?

Спасибо...
Автор: METAJIJI
Дата сообщения: 10.05.2010 06:30
Пробел добавляется после каждого вызова

Код: CALL :REPLINE "file.ini" "Server_port=" "Server_port=8080"
Автор: Mark_Titov
Дата сообщения: 10.05.2010 06:57

Цитата:
...А это вообще имеет большое значение? Если да, то почему?

Не, это понятно, я имею ввиду что код хуже от этго обрабатываться не будет?
А то практически всегда встречаю что после каждой строки пробелы в коде...
Автор: METAJIJI
Дата сообщения: 10.05.2010 06:58
Как бы в ини файле пробелы в конце никчему, тем более "накопительного" характера...
Автор: Mark_Titov
Дата сообщения: 10.05.2010 08:40

Цитата:
Как бы в ини файле пробелы в конце никчему, тем более "накопительного" характера...

С ини-файлом понятно, а в батниках критичен пробел в каждой из строк?
Автор: wolf0425
Дата сообщения: 10.05.2010 09:35

Цитата:
а в батниках критичен пробел в каждой из строк?
не в каждой, но ошибки "лишний пробел, нарушающий работу батника" - регулярно случаются, особенно у тех кто не привык set с кавычками писать
Автор: Mark_Titov
Дата сообщения: 10.05.2010 09:52

Цитата:
не в каждой, но ошибки "лишний пробел, нарушающий работу батника" - регулярно случаются, особенно у тех кто не привык set с кавычками писать

....нет, в самой команде - это понятно, я имею ввиду в конце строки каждой команды во всем батнике - ничего?
Автор: METAJIJI
Дата сообщения: 10.05.2010 11:47

Код: SET a=1_
echo.[%a%]
SET "a=1"_
echo.[%a%]
Автор: METAJIJI
Дата сообщения: 10.05.2010 20:37
Вот незадача... Как добавить к файлу "лишние" строки понятно... А вот как их удалить?


Код:
[_start_]
jkg=455
qwe=asd

[_vars_]
var=123
zxc=567
Автор: 01MDM
Дата сообщения: 10.05.2010 22:35
METAJIJI

Цитата:
как обработать этот файл таким образом, чтобы получилось так:

Я бы воспользовался nircmd.

Код:
nircmdc inidelsec "Full\Path\To\test.ini" "_vars_"
Автор: Mark_Titov
Дата сообщения: 11.05.2010 00:03
...Подскажите плиз, как прописывать путь в батнике что бы вызвать скрипт vbs упакованный в один exe-шник конвертером "Bat To Exe Converter". Они же в месте там находятся, и не понятно что писать теперь...(
Автор: us0r
Дата сообщения: 11.05.2010 09:04
Mark_Titov
Попробуй из батнега вызывать екзешнег...

Добавлено:
Может кто подскажет как в батниге читать сканкоды нажатых клавиш без сторонних прог?
Через set- это понятно. Я вот думал- можно ли через %errorlevel%?
Автор: wolf0425
Дата сообщения: 11.05.2010 11:10

Цитата:
Может кто подскажет как в батниге читать сканкоды нажатых клавиш без сторонних прог?
Через set- это понятно. Я вот думал- можно ли через %errorlevel%?
ну если найдешь или напишешь на vbs утилиту, которая в errorlevel возвращает сканкод клавиши - почему нет?
Автор: Joo1z
Дата сообщения: 11.05.2010 13:06
Need help/ У самого башка не варит.
Нужно файл вида:

Код: Арг1Свойство1
Арг1Свойство2
Арг1Свойство3
Арг1Свойство4
Арг1Свойство5
Арг2Свойство1
Арг2Свойство2
Арг2Свойство3
Арг2Свойство4
Арг2Свойство5
....
Автор: wolf0425
Дата сообщения: 11.05.2010 13:45

Цитата:
не ориентируясь на значения.
Грубо говоря группировать по пять строк в линию.
если пустых строк нет то без извратов


Код: @echo off
setlocal enabledelayedexpansion
set /a cnt=0
for /f "delims=" %%a in (file.txt) do 1>>file2.txt (
    set /a cnt += 1
    if !cnt! equ 5 (set /a cnt = 0 && echo.%%~a) else (0>nul set /p ="%%~a ")
)
if %cnt% neq 5 1>>file2.txt echo.
Автор: Mark_Titov
Дата сообщения: 11.05.2010 13:46
...Я так понимаю для того что бы скрыть окно консоли, например пинга -


Код: cmdow @ /HID
@echo off
ping 127.0.0.1
Автор: Joo1z
Дата сообщения: 11.05.2010 14:12
wolf0425
С пустыми. Вполне может и sed с этим справится.
Спасибо. Попробую доработать.
Автор: king_stiven
Дата сообщения: 11.05.2010 14:14
Mark_Titov
ругается, так как потненциально данная утиль может скрывать батник, в том числе и с "вирусами"
Автор: mugil_cephalus
Дата сообщения: 11.05.2010 14:20
Mark_Titov

Цитата:
но почему каспер на него ругается?!

A T T E N T I O N
Some anti-virus software vendors now classify cmdow.exe as a hacking tool because it can hide windows. A hacking tool is NOT a virus.
http://www.commandline.co.uk/cmdow/
Автор: Mark_Titov
Дата сообщения: 11.05.2010 14:46

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

На все остальные батники он не ругается же...
Автор: king_stiven
Дата сообщения: 11.05.2010 15:50
Mark_Titov

Цитата:
На все остальные батники он не ругается же

точнее данная утиль скрыто запускает батники (и проги другие наверно, не запускал просто), что является естественно подозрительым для антивируснков. Поэтому такие утили надо добавлять в исключения антивирей.
Автор: Mark_Titov
Дата сообщения: 11.05.2010 16:08

Цитата:
Поэтому такие утили надо добавлять в исключения антивирей.

...пришлось однако.)
Автор: wolf0425
Дата сообщения: 11.05.2010 21:26
Joo1z
Цитата:
С пустыми.
ну значит доработать цикл чтоб пустые не пропускал. пример пару страниц назад есть, переноси...


Цитата:
Вполне может и sed с этим справится.

справится, и быстрее, только это надо спеца по седу подманивать
Автор: igor_andreev
Дата сообщения: 11.05.2010 23:19

Цитата:
С пустыми.

А что с ними, с пустыми делать надо? Пропускать? Удалять?
Просто склеивать 5 строчек(замена переноса строки на пробел) - это:

Код: sed -e "N;N;N;N;s/\n/ /g"

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

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


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