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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    wolf0425



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

    Цитата:
    где ошибка в этом коде? (ввел его в консоли)  
    нет в нем ошибки, если в консоли. может делает не то что хочешь - но делает же.
     

    Цитата:
    помимо всех файлов с "2" в имени затесался еще и такой
    G:\scripts\TEST\red\scrnsave.scr9B.bat  
    ну затесался, подумаешь  -наверно у него короткое имя с двойкой в середине. Нефиг на такие маски надеяться.
    т.е. или напрочь отключаешь в файловой системе генерацию имен формата 8.3 или придумываешь другой способ поиска нужных файлов, не проверяющий короткие имена.
    думаешь в сторону примера:
    Код:
    for /L %A in (1 1 2) do echo %~A & for /f %i in ('dir /b path\. ^|findstr %~A ') do @echo.path\.%~i
    если  в path\ или в расширении могут встречаться 1 и/или 2 - то тоже можно, но будет позатейливее.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 15:38 30-03-2010 | Исправлено: wolf0425, 16:14 30-03-2010
    mugil_cephalus

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

    про Ntfs8dot3NameCreation даже в голову не пришло - никогда не знаешь, где враг окопается тихой сапой  
     
    Добавлено:
    wolf0425

    Цитата:
    думаешь в сторону примера:
    Код:for /L %A in (1 1 2) do echo %~A & for /f %i in ('dir /b path\. ^|findstr %~A ') do @echo.path\.%~i  
    если  в path\ или в расширении могут встречаться 1 и/или 2 - то тоже можно, но будет позатейливее.

    у меня код для заказчика такой был:

    Код:
    rem @echo off
    for /l %%A in (1900,1,2010) do for %%i in ("c:\folder\*(%%~A)*.*") do (
    if not exist "c:\%%~A\nul" md "c:\%%~A"
    move /-y "%%~i" "c:\%%~A\%%~nxi"
    )
    pause

    findstr найдешь всю лексему (она такая - боевик-14.клинков.(2010).DVDRip.avi ) а как там вычленить 2010 год - пока не знаю (буду думать) , это же не %%~ni или %%~xi или подобное

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 16:25 30-03-2010
    wolf0425



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

    Цитата:
    findstr найдешь всю лексему (она такая - боевик-14.клинков.(2010).DVDRip.avi ) а как там вычленить 2010 год - пока не знаю
    а зачем ее вычленять то? Или ты хочешь год из имени убрать? тогда как-то так:

    Код:
    @echo off
    for /l %%A in (1900,1,2010) do for /f %%i in ('dir /b /a-d c:\folder\. ^| findstr (%%~A)') do call :proc %%~A "%%~i"
     
    pause
    exit
     
    :proc
    if not exist "c:\%~1\nul" md "c:\%~1"
    set "name=%~2"
    call set "name=%%name:(%1)=%%"
    set "name=%name:..=.%"
    move /-y "c:\folder\%~2" "c:\%~1\%name%"
    goto:eof

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 17:22 30-03-2010 | Исправлено: wolf0425, 17:39 30-03-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    я немного отсутствовал, сейчас переписал, вот чего требовалось заказчику

    Код:
    rem @echo off  
    for %%I in ("c:\folder\*.*") do for /f "tokens=1-3 delims=()" %%a in ('echo.%%~nxI') do (
    if not exist "c:\%%~b\nul" md "c:\%%~b"
    if /i "_%%~b" neq "_" move /-y "%%~I" "c:\%%~b\%%~nxI"
    )
    pause

     
    года все разные и перед move'om нужно было создать папку с именем=год, а год "сидит" внутри имени файла, я пытался его вычленить через маски - *(2010)*.* - и проход по всем годам от братьев люмьер через for /L , но тут dos naming некстати, пошел по пути - парсить через for delims=() и потом в созданную папку с именем года сунуть файл с таким годом в имени
     
    Добавлено:
    wolf0425
    1 что означает call set ... (это же не метка и не батник) - ?
    2
    Цитата:
     call set "name=%%name%1)=%%"  

    здесь, наверное, нечетный процент - ?
     
    call set "name=%%name:(%1)=%%"  
     
    красный - замена
    зеленый - переменная %name%  
    синий - ?
     

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 21:42 30-03-2010 | Исправлено: mugil_cephalus, 23:20 30-03-2010
    wolf0425



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

    Цитата:
    1 что означает call set ... (это же не метка и не батник) - ?  
    написанная команда будет выполнена в две стадии.
    это такой способ избегать возни с setlocal enabledelayedexpansion
     
    там действительно нечетный процент  - у %1, а домыслы - неверны.
    %1 подставляется в строку сразу при обработке call. допустим %1 это 2010
    оба %% этой же обработкой преобразуются в %
    после чего исполняется полученная строка set "name=%name:(2010)=%"
    в сумме имеем примерный аналог - set "name=!name:(%1)=!"
     
    ps: смайлики отключать не забывай, когда такой код пишешь.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 23:51 30-03-2010 | Исправлено: wolf0425, 23:55 30-03-2010
    compiler91

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Мне надо добавить программку в список запускаемых при выключении компа.
    Насколько я понял, мне надо создать новый раздел в
    Код:
    HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\Scripts\Logoff\0
    с названием-индексом. Главная проблемма в том, что я не знаю как вычислить этот самый индекс. Кто подскажет?
     
    Заранее спасибо.

    Всего записей: 2 | Зарегистр. 31-03-2010 | Отправлено: 00:37 31-03-2010
    01MDM



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

    Цитата:
    как вычислить этот самый индекс.


    Код:
     
    @echo off
    setlocal
     
    set "regpath=hkcu\Software\Policies\Microsoft\Windows\System\Scripts\Logoff"
     
    for /f %%i in ('reg query "%regpath%" ^| findstr "[0-9]*"') do set /a newindex+=1
    set /a newindex-=1
     
    reg add "%regpath%" /v %newindex% /t reg_sz /d "%programfiles%\akelpad\akelpad" /f
     

     
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 05:40 31-03-2010
    mugil_cephalus

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

    Цитата:
    в сумме имеем примерный аналог - set "name=!name:(%1)=!"  

    это "читабельно", а то я уж подумал, что ты - колдун :smile:  
     
    Добавлено:
    wolf0425
    NB в отличие от этого кода

    Цитата:
    command-line mode  
    F:\Documents and Settings\admin>for /L %A in (1 1 2) do for %i in ("G:\scripts\TEST\red\*%~A*.*") do @echo.%~i  

    вот этот for /L %A in (1993 1 2010) do for %i in ("G:\scripts\TEST\red\*%~A*.*") do @echo.%~i
    отрабатывает без ошибок в масках на 1000 файлов (первый код тестировался на других масках, т.к. у меня нет database заказчика с файлами a-la боевик-14.клинков.(2010).DVDRip.avi ) C'est la vie!

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 09:35 31-03-2010 | Исправлено: mugil_cephalus, 09:40 31-03-2010
    Sglogin

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Необходимо решить задачи в одном BAT-файле:
    1. При входе пользователя запускается указанная программа
    2. В окне CMD.exe выдается текст "Соединение с Интернет установлено"
    3. Через 5 мин после действия 2 подключается сетевой диск NET USE Z: \\HP4510s\Public /PERSISTENT:NO Подскажите как прописать это время ожидания?
     
    Как прописать команду для действия 2, так чтобы пользователь подтвердил ее нажатием ENTER?

    Всего записей: 81 | Зарегистр. 29-03-2007 | Отправлено: 11:33 31-03-2010 | Исправлено: Sglogin, 11:50 31-03-2010
    Romeo_sh



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

    Всего записей: 204 | Зарегистр. 17-02-2006 | Отправлено: 11:54 31-03-2010
    mugil_cephalus

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

    Код:
    echo."Соединение с Интернет установлено"
    pause
    ping -n 301 localhost>nul 2>&1
    NET USE Z: \\HP4510s\Public /PERSISTENT:NO

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 12:12 31-03-2010 | Исправлено: mugil_cephalus, 12:14 31-03-2010
    Cheerful_a_bear



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Приветствую всех.
     
    Подскажите пожалуйста, как сделать bat-файл, чтобы
     
    При выполнении добавлял в  
    Mozilla FireFox  в “about:config” в “network.automatic-ntlm-auth.trusted-uris”  строчку https://server.net.local:4081
     
    И в IE https://server.net.local в местную интрасеть как доверенное

    Всего записей: 103 | Зарегистр. 30-04-2008 | Отправлено: 16:51 31-03-2010
    ustas1983

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

    Цитата:
    ustas1983
    Уильям Станек - Командная строка Microsoft Windows  
    найжешь там главу про сеть (команда netsh )

     
    А никто на пальцах не объяснит как сделать хотя бы пример какой ааа ?

    Всего записей: 11 | Зарегистр. 29-03-2010 | Отправлено: 17:07 31-03-2010
    ipmanyak



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ustas1983 ну где- то так
    @echo on  
    :nachalo  
      sleep 60  
      ping -a ip_адрес_шлюза_впн   -n 1
      if errorlevel 0 goto nachalo
      rasdial имя_впн_соединения /DISCONNECT    
      rasdial имя_впн_соединения логин пароль  
    goto nachalo
     
     
     
     
     
     
     


    ----------
    В сортире лучше быть юзером, чем админом...

    Всего записей: 11985 | Зарегистр. 10-12-2003 | Отправлено: 18:18 31-03-2010
    ustas1983

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

    Цитата:
    @echo on  
    :nachalo  
      sleep 60  
      ping -a ip_адрес_шлюза_впн   -n 1
      if errorlevel 0 goto nachalo
      rasdial имя_впн_соединения /DISCONNECT    
      rasdial имя_впн_соединения логин пароль  
    goto nachalo  

     
    А почему пишет что sleep не являеться внутренней или внешней командой  ?

    Всего записей: 11 | Зарегистр. 29-03-2010 | Отправлено: 23:10 31-03-2010
    king_stiven

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

    Цитата:
    А почему пишет что sleep не являеться внутренней или внешней командой

    Это сторонняя утиль из шапки
     
    Добавлено:
    из GNU utilities for Win32

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 08:16 01-04-2010
    ustas1983

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а в принципе то можно без неё обойтись мне особо тайм аут то ненужен ...

    Всего записей: 11 | Зарегистр. 29-03-2010 | Отправлено: 09:22 01-04-2010
    wolf0425



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

    Цитата:
    а в принципе то можно без неё обойтись
    да пинг вместо нее прописать, пример на странице есть.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 10:33 01-04-2010
    ustas1983

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    в принцпе поставил уже русурс кит, а как узнат ьчто он перещёлкивает или нет интерфейсы  ? чё то пока обрывов нет но непойму, это пока впн так работает стабильно иои всё таки перещёлки есть  ? и там как он за эррор считает каждый разкогда появляеться одна строка превышен интервал ?

    Всего записей: 11 | Зарегистр. 29-03-2010 | Отправлено: 10:46 01-04-2010
    wolf0425



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

    Цитата:
    а как узнат ьчто он перещёлкивает или нет интерфейсы  
    влепить отладочную печать куда-нибудь.

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 11:39 01-04-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