Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8

Модерирует : KLASS, IFkO

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах 8
(часть 1, часть 2, часть 3, часть 4, часть 5, часть 6, часть 7)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<<>>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Делаем паузу в командном файле стандартными средствами Windows
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    от наблюдательного человека стоящего за спиной?

    ...Да.
     
    Может как-нибудь что бы он команды введенные с клавы понимал, но просто не показывал их?
     
    Этот код будет на vista и 7-ке работать?
     
    Спасибо за помощь...  
    С уважением...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 18:02 09-05-2010 | Исправлено: Mark_Titov, 18:07 09-05-2010
    soft111

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите пожалуйста с написанием батника под такое дело:
    Например в 1.txt указано число 15, значит bat файл считывает число из 1.txt и копирует текстовый файл с таким же числом в названии (т.е. 15.txt)  
    Если через bat файл не возможно такое подскажите какую нибудь программу для этого или скрипт.

    Всего записей: 25 | Зарегистр. 05-11-2009 | Отправлено: 18:23 09-05-2010
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    soft111
    А что, в том файле кроме цифры ничего нет? Тогда примерно так:

    Код:
    @echo off
    set /p n=<x:\1.txt
    copy x:\%n%.txt x:\Temp

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 18:48 09-05-2010
    METAJIJI

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    А нафига ВЕСЬ инишник менять построчно - непонятно.  

    Подскажите как тогда НЕ построчно средствами BATCH изменить значения? с sed очень заманчиво конечно...
    Но:
    1. как сделать поиск НЕ чувствительный к регистру.
    2. как быть с переменными типа var=123 и gvar=123, ;var=123 и т.д. (мне нужно изменять только var)
     
    Спасибо всем за помощь

    Всего записей: 27 | Зарегистр. 11-03-2010 | Отправлено: 19:15 09-05-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Подскажите как тогда НЕ построчно средствами BATCH изменить значения? с sed очень заманчиво конечно...
    Но:
    1. как сделать поиск НЕ чувствительный к регистру.
    i в параметре команды

    Цитата:
    2. как быть с переменными типа var=123 и gvar=123, ;var=123 и т.д. (мне нужно изменять только var)
    включить начало строки в поиск.

    Код:
    sed  "s/^(var=).*$/\1%var%/gi" <file.txt >file2.txt

    замена во всех (g) строках начинающихся с var= без учета регистра (i)
    если не нравится / как разделитель в команде - можно взять другой.
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 20:07 09-05-2010 | Исправлено: wolf0425, 20:08 09-05-2010
    Rush

    Уже за тридцать...
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    METAJIJI

    Цитата:
    2. как быть с переменными типа var=123 и gvar=123, ;var=123 и т.д. (мне нужно изменять только var)  

    По моему, это очевидно - ставишь символ начала строки перед var и все.
     
     
     
    Добавлено:
    припозднился...

    Всего записей: 3551 | Зарегистр. 20-11-2003 | Отправлено: 20:09 09-05-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    METAJIJI
    Может не в тему, есть такой файлик INIFILE.COM. К нему в батнике прописываешь:
    Syntax:  INIFILE inifile_name [section] item=
    Syntax:  INIFILE inifile_name [section] /remove
     
    Ну и ещё там функции есть.
    http://home.mnet-online.de/horst.muc/main.htm

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 21:12 09-05-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ...подскажите как сделать в данной паузе задержку не 5 а 2 секунды?
     

    Код:
    set /a paused=%time:~7,-3%+5  
    if %paused% GEQ 10 set /a paused=!paused!-10  
    :check  
    set /a ttt=%time:~7,-3%  
    if not %paused%==%ttt% goto :check  

     
    И как они вычисляются?! Мне не понятно ~7,-3%+5
    Благодарю...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 21:57 09-05-2010
    us0r



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    Мне кажется ты пишешь троян на .bat- ах )))\

    Всего записей: 406 | Зарегистр. 06-12-2007 | Отправлено: 22:09 09-05-2010
    soft111

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Rush
     
    Спасибо, именно это и было нужно, все работает

    Всего записей: 25 | Зарегистр. 05-11-2009 | Отправлено: 22:37 09-05-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mark_Titov
    Цитата:
    ...подскажите как сделать в данной паузе задержку не 5 а 2 секунды?  
    для начала я подскажу что делать паузу так, как сделано в этом батнике - нежелательно в принципе.
    потому как такой цикл вызывает полную загрузку процессора (ну или не всего проца, а одного ядра у многоядерного, но это тоже не айс)
     
    юзай для пауз пинг и не изобретай велосипед.
    например так:
    1>nul 2>&1 ping 127.255.255.255 -n 1 -w 2000  
    2000 - это милисекунды, при желании поставишь сколько надо.
     
     
     
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 22:44 09-05-2010 | Исправлено: wolf0425, 22:46 09-05-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425

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

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

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

    Ага, вирусописатель из меня как из коровы балерина )))...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 23:01 09-05-2010
    METAJIJI

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрые люди тыкнули носом вот в такой код:

    Код:
    @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
     

    работает изумительно! в файле размером 8Кб изменяются ~38 опций около 6-7 сек.!!! К тому же все проблемные строки не испортились!
     
    Ссылка на оригинал _http://forum.oszone.net/post-1404643-13.html
    Еще раз всем спасибо за помощь!

    Всего записей: 27 | Зарегистр. 11-03-2010 | Отправлено: 00:22 10-05-2010 | Исправлено: METAJIJI, 01:14 10-05-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    работает изумительно! в файле размером 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"
     


    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 01:35 10-05-2010
    METAJIJI

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Немного модифицировал код, теперь нет пробелов в конце строк, старый код добавлял пробелы

    Код:
     
    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
     

     

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

    очень круто конечно... но sed это отдельная история, мне больше понравилась идея со стандартными средствами бат не прибегая к доп. ПО, да и по времени работы почти не заметно

    Всего записей: 27 | Зарегистр. 11-03-2010 | Отправлено: 01:45 10-05-2010 | Исправлено: METAJIJI, 01:46 10-05-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

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

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 07:12 10-05-2010
    METAJIJI

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пробел добавляется после каждого вызова

    Код:
    CALL :REPLINE "file.ini" "Server_port=" "Server_port=8080"  

    после 1 вызова получаем:

    Код:
    Server_port=8080_

    после 5 вызова получим:

    Код:
    Server_port=8080_____

    Всего записей: 27 | Зарегистр. 11-03-2010 | Отправлено: 07:30 10-05-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

    Не, это понятно, я имею ввиду что код хуже от этго обрабатываться не будет?
    А то практически всегда встречаю что после каждой строки пробелы в коде...

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 07:57 10-05-2010
    METAJIJI

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как бы в ини файле пробелы в конце никчему, тем более "накопительного" характера...

    Всего записей: 27 | Зарегистр. 11-03-2010 | Отправлено: 07:58 10-05-2010
    Mark_Titov



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

    С ини-файлом понятно, а в батниках критичен пробел в каждой из строк?

    Всего записей: 387 | Зарегистр. 12-04-2010 | Отправлено: 09:40 10-05-2010 | Исправлено: Mark_Titov, 09:41 10-05-2010
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru