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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    Vikkywulf

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Благодарю, буду пробовать.

    Всего записей: 146 | Зарегистр. 13-09-2007 | Отправлено: 23:28 22-11-2009
    kimtan

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброй ночи, уважаемые!
    Такой вопрос, просьба:
    Можно ли создать такую пинговалку-батник, которая бы пинговала локалку по определенным IP, скажем через секунд 20-30 и при наличии или отсутствии пинга переписывала определенные ключи реестра. Чтобы потом ее подвесить в автозагрузку.
    Параметр реестра:
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\{F61BE54F-3710-4F78-B81F-48B1FEB472B8}\DefaultGateway=192.168.0.6
    И параметр:
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\{F61BE54F-3710-4F78-B81F-48B1FEB472B8}\NameServer=192.168.0.6
    Заменять на 192.168.0.1,  при условии непрохождения пинга на локальные IP 192.168.0.5 и 192.168.0.8 и при наличии пинга на 192.168.0.1.
    А если хотябы один из указанных IP (192.168.0.5 и 192.168.0.8) пингуется, или не пингуется IP 192.168.0.1, возвращать указанные параметры на место - тоесть - 192.168.0.6
     Или подскажите, может есть какая-нибудь прожка которая это все делает. Заранее большое спасибо за ответ.

    Всего записей: 291 | Зарегистр. 28-02-2009 | Отправлено: 02:00 23-11-2009
    Vikkywulf

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

    Цитата:
    set n=0  
    for %%i in (*.txt) do (  
        set /a n+=1  
        call set file%%n%%=%%i  
        rem чего-то еще  
    )  
    set file

    Чего-то не получается    Сама set в цикле не отрабатывает, даже так:
     
    for %%i in (*.txt) do (  
    call set file=%%i
    Echo %file%
    Pause
    )
     
    Как заставить работать? И нужна ли call перед set в данном примере?

    Всего записей: 146 | Зарегистр. 13-09-2007 | Отправлено: 06:57 23-11-2009
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Что такое "Sed"? Никогда про такой не слыхал. И в "Command-line reference A-Z", что в помощи у Виндузы, его нет. Где можно почитать о нём поподробнее?

    Цитата:
    (эмуляция "grep '.' "):

    И про grep тоже не слыхал.
     
    Добавлено:
    Можно ли при помощи Sed удалять определённые строки, зная текущую? Напр., удалить строку на 2 позиции выше текущей.
    И ещё. Как при использовании Sed указать, с каким файлом нужно работать?

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 07:10 23-11-2009 | Исправлено: BVV63, 08:03 23-11-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BVV63
    Что такое sed, и зачем его едят
    Подробностей я здесь разговаривать не буду. В кратце, sed (streaming editor), позволяет обрабатывать огромные объёмы текста, если нужно выполнить над ним шаблонные действия. То есть, заменить то на сё, склеить строки там и сям, удалить то и это.
    Как работает sed? Утилита берёт строку текста и пробует к ней применить скрипт редактирования. Затем следующую строку, следующую, и так пока не достигнет конца текста.
    Homepage
     
    http://www.gnu.org/software/sed/sed.html  

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 11:06 23-11-2009
    BlackBerry

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите написать батник:
     
    В текущем каталоге файлы, чьи имена содержат  некую подстроку,
    переименовать в имя без этой подстроки

    Всего записей: 196 | Зарегистр. 08-09-2004 | Отправлено: 20:21 23-11-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BlackBerry
    Ну а где пример названия файла? В общем случае что-то вроде:

    Код:
     
    @echo off
    setlocal
     
    for %%i in ("*some string*") do call:ren "%%i"
    goto:eof
     
    :ren
    set "file=%~1"
     
    :check
     
    if exist "%file:some string=%" (
        set "file=1%file%"
        goto:check
    )
     
    ren %1 "%file:some string=%"
     

     
    Где 'some string' - подстрока.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 21:13 23-11-2009
    wolf0425



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

    Цитата:
    Чего-то не получается    Сама set в цикле не отрабатывает, даже так:  
    for %%i in (*.txt) do (  
    call set file=%%i
    Echo %file%
    Pause
    )  
    Вообще-то, если бы ты все-таки запустил мой пример - то понял бы, что как раз set в батнике отрабатывает исправно (там все присвоенные переменные печатались после завершения цикла), а в твоем - не отрабатывает так как тебе хотелось бы echo %file% : cmd трактует весь цикл for как целое и заменяет все %переменные% на их значения в момент старта цикла, а отнюдь не на каждом проходе цикла построчно.
    Обходится это примерно так

    Код:
    for %%i in (*.txt) do (  
    call set file=%%i
    call :_print
    Pause
    )
    exit /b  
     
    :_print
    Echo %file%
    exit /b  
    Ну или через setlocal enabledelayedexpansion и использование !переменных! - они замещаются значениями именно перед использованием.
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 22:04 23-11-2009 | Исправлено: wolf0425, 22:10 23-11-2009
    Vikkywulf

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Спасибо! Пример сработал, теперь буду разбираться детально. И ещё, если не трудно, можно рабочий пример с setlocal enabledelayedexpansion?

    Всего записей: 146 | Зарегистр. 13-09-2007 | Отправлено: 00:17 24-11-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Vikkywulf
    Код:
     
    setlocal enabledelayedexpansion
    for %%i in (*.txt) do (  
    set file=%%i
    Echo !file!
    Pause
    )  

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 01:51 24-11-2009 | Исправлено: wolf0425, 03:39 24-11-2009
    Vikkywulf

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Большое спасибо ещё раз!

    Всего записей: 146 | Зарегистр. 13-09-2007 | Отправлено: 04:54 24-11-2009
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пытаюсь получить значение параметра "ProfilesDirectory" под ключём реестра [HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList]. Использую команду
    Код:
    For /F %%A In ('%SystemRoot%\System32\Reg.exe Query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\ProfileList" /V "ProfilesDirectory"') Do (...)

    , но она не работает. Напр., если использовать Echo %%A то выводится 2 Echo-ответа:
    HKLM\Software\Microsoft\Windows
    и
    ProfilesDirectory
    . По-видимому, это связано с тем, что ключ содержит пробел. Я не понимаю, почему игнорируются кавычки. И можно ли это как-то побороть?
    Ещё. Кто-нибудь может подсказать, для чего служит параметр "UseBackq" в конструкции For... In... Do...? Почитав Stanek-а не очень понял. Согласно ему параметр разрешает использование в источнике кавычек. Но и без него их можно использовать, а с ним вообще какая-то лажа происходит.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 08:05 24-11-2009 | Исправлено: BVV63, 08:40 24-11-2009
    king_stiven

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

    Цитата:
    Кто-нибудь может подсказать, для чего служит параметр "UseBackq"  

    например вывод построчно содержимого файла:
     
    for /f "usebackq tokens=*" %%i in ("список файлов") do

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 08:49 24-11-2009 | Исправлено: king_stiven, 09:49 24-11-2009
    mouser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    есть список названий файлов ... мне их нужно все собрать в строку  
    сopy result.txt+1.txt+2.txt+3.txt result.txt
     
    1.bat
    for /F %%a IN (files.lst) DO call add.bat %%a
     
    add.bat
    echo +%1>>result.txt
     
     
    вот загвоздка собственно в том что echo добавляет с новой строки ((
     
    КАК добавить текст в файл в конец строки?

    Всего записей: 800 | Зарегистр. 10-11-2006 | Отправлено: 09:02 24-11-2009
    king_stiven

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

    Цитата:
    echo  

    mouser
    Посмотри я давал ссылку на утилиту ech и 01MDM  ВЫкладывал пример как в одну строку.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 11:28 24-11-2009
    NIKZZZZ



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

    Цитата:
    есть список названий файлов ... мне их нужно все собрать в строку  

    А не проще ли собрать результат в переменную и потом записать ее файл?
     

    Код:
    set result=copy result.txt
    for /F %%a IN (files.lst) DO call :add %%a
    set result=%result% result.txt
    echo %result%>result.txt
    goto :eof
     
    :add
    set result=%result%+%1
    goto :eof  

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 11:45 24-11-2009
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет! Есть задача удалить из определённого места все файлы, которых нет в списке. Список невелик, его можно напрямую указать в источнике конструкции For... In... Do... Проблема в том, что при сравнении файлов с указанными в источнике (я использовал операторы "If Not ...==..." и "NEq") учитывается регистр. В реальности нужные файлы (которые удалять нельзя) могут отличаться регистром букв от тех, что будут в списке. Подскажите, пожалуйста, можно ли как нибудь проводить сравнения без учёта регистра? Или может кто иной метод для решения задачи подскажет? Заранее благодарен.
    P. S. Ранее я для решения этой задачи использовал RoboCopy, но у неё проблемы с русским языком.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 13:33 24-11-2009 | Исправлено: BVV63, 13:38 24-11-2009
    NIKZZZZ



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

    Цитата:
    учитывается регистр.  

    if /i - без учета

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 13:41 24-11-2009
    king_stiven

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

    Цитата:
    Ранее я для решения этой задачи использовал RoboCopy, но у неё проблемы с русским языком.

    chcp 1251 > nul
    может помочь

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 13:55 24-11-2009
    mouser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    как вот это вписать в цикл ?
     
    Echo Sleep 3 min
    sleep.exe 60
    Echo Sleep 2 min
    sleep.exe 60
    Echo Sleep 1 min
    sleep.exe 60
     

    Всего записей: 800 | Зарегистр. 10-11-2006 | Отправлено: 14:31 24-11-2009
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru