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

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

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

vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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





    http://forum.ru-board.com/topic.cgi?forum=62&topic=17154

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 23:07 04-11-2008 | Исправлено: vu1tur, 11:38 26-05-2009
    KYMichael

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возникла вот такая задачка:  
    выполняемые файлы (name.exe), необходимо переименовать с приписыванием вначале версии данного файла, т.е. получить что-то вида X.XX.XX.XX_name.exe.
     
    Возможно решить данную задачку, используя только возможности командной строки?

    Всего записей: 36 | Зарегистр. 25-08-2007 | Отправлено: 16:35 19-05-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    All
    господа есть полезная и интересная тема: как надо писать bat/cmd файлы чтобы наличие концевых пробелов не влияло на выполнение.
    На данный момент лично я знаю такие правила:
     - присвоение ВСЕГДА производить так: SET "MY_PARAM=val"
     - вывод строк ВСЕГДА заключать в скобки: (ECHO %MY_PARAM%)
     - в любой цепочке команд либо в конвеере последний операнд заключать в скобки ( )
     - все переменные передавать и обрабатывать с обрамляющими " ", а хранить без них(то есть классическая команда для второй строки  скрипта CD /D "%~dp0")

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 17:42 19-05-2009 | Исправлено: yurkesha, 17:42 19-05-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha
    Ошибки возникают при присвоении переменной значения. Потом такая переменная может быть неправильно обработана, особенно если к ней добавляется другое значение или переменная.
     
    Было масса самых печальных случаев. Из своей практики - удалил в линуксе вместо нужного подкаталога весь каталог

    Код:
     
    $ rm -rf ~/.fluxbox/styles/ mystyle
     

    Т.е вместо mystyle удалился styles. И все из-за случайного пробела. Хорошо что он был не после первого слеша :)

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:00 19-05-2009 | Исправлено: 01MDM, 19:05 19-05-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    ну по-моему я как раз описал как исключить ошибки присвоения - проверить легко ... Но ведь это далеко не все возможные ошибки... Я и предлагаю по-возможности найти все варианты и поместить в шапку.
     
    Добавлено:
    Ну скажем в качестве проверки рекомендую такой код:
    Код:
    @ECHO OFF
    SET "PARAM=12345"6789
    ECHO "%PARAM%"


    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 20:07 19-05-2009
    LetMyPeopleGo



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ghosty
    Скрипт видимо ошибочно конмтатировал ошибку и прерывал дальнейшее выполнение. По сути всю работу делают двае строки:  
     
    rem Copy the Windows Installer folder - копирование файлов windows\installer вместе с правами доступа.
    xcopy "%windir%\installer" "%target%\installer" /E /I /H /K /O
     
    Сначала видимо удаляется содержимое C:\windows\installer, но моя винда такой команды не нашла, можно очистить папку руками вместо:
    rd /s /q "%windir%\Installer"
     
    Тут можно написать все подробно, собственно тут и создается ссылка:
    C:\windows\system32\junction.exe "C:\windows\installer" "D:\wininst\installer"
     
    Махинации с правами
    echo y| cacls "%windir%\installer" /T /P BUILTIN\Administrators:F "NT Authority\SYSTEM:F" Everyone:R
    "%sinacl%\subinacl.exe" /file "%windir%\installer" /setowner=builtin\administrators
     
    Переменные можно не использовать и прописать вручную:
    %windir% = C:\windows
    %programfiles% - C:\Program files
    %sinacls% - C:\Program files\Windows Resource Kits\Tools
    %target% - папка назначения, она должна быть создана заранее на диске, куда переезжает Installer, например D:\wininst. В батнике тоже ручками нужно будет прописать D:\wininst!
     
    И наконец папка "созданная" junction может быть корректно удалена только junction, ну или форматированием.
    C:\windows\system32\junction.exe -d d:\junctions\installer если попытка была неудачной

    Всего записей: 117 | Зарегистр. 14-09-2005 | Отправлено: 20:46 19-05-2009
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Snarrrk
    можно, для этого сначала очисть ассоциацию
    Код:
    Windows Registry Editor Version 5.00
     
    [-HKEY_CLASSES_ROOT\.cmd]
     
    после чего заново ее поставь
    Код:
    Windows Registry Editor Version 5.00
     
    [HKEY_CLASSES_ROOT\.cmd]
    @="cmdfile"
     
    [HKEY_CLASSES_ROOT\.cmd\PersistentHandler]
    @="{5e941d80-bf96-11cd-b579-08002b30bfeb}"
     
    [HKEY_CLASSES_ROOT\.cmd\ShellNew]
    "Nullfile"=""

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 20:59 19-05-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha
    Можно в качестве рекомендации поместить следующее:
     
    1. присвоение значения переменной:
    set "variable=value"
     
    2. файлы и пути к ним, при файловых операциях (создание, копирование, удаление, перемещение) должны быть заключены в кавычки, даже если они не содержат пробелов, дабы избежать случайностей.
     
    И разъяснить почему и зачем.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:13 19-05-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    А новые варианты возможных ошибок найти? Все вышенаписанное уже сформулировано как офоррмить и кто именно в шапку помещать будет - дело десятое...
    Ну правда если эта тема больше никому не интересна то я не настаиваю
    Пользуйтесь на здоровье скриптом из шапки "для удаления концевых пробелов"...

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 22:47 19-05-2009
    xp3n

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите!
    мне нужно скачать файлы с http://.
    если какой-то определенный, то указываю файл.rar, а как скачать сразу все файлы? указываю *.* и мне пишет - ошибка 404 not found, и при выполнении вместо *.* показывает %2А.%2А
    как это исправить?

    Всего записей: 18 | Зарегистр. 01-11-2004 | Отправлено: 23:05 19-05-2009
    01MDM



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

    Цитата:
    А новые варианты возможных ошибок найти?

    Думаю, что не надо искать их специально. Может действительно стоит завести подраздел в шапке, где отмечать типичные ошибки. Но как показывает практика люди приходят, спрашивают, а то что выделено жирным красным в упор не видят.
    Не всегда все бывает очевидно, смотришь и в упор не видишь простые ошибки. А если команда в батнике не прописана явно, а формируется в ходе его выполнения, то вполне может быть и такой результат   :

    Код:
     
    rd /s /q c:\ temp 2>nul
    echo Please, insert Windows install CD and press Reset.
    pause 1>nul
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:45 19-05-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    ну вот как раз именно приведенный пример показывает насколько изолирование операндов бывает полезным:
    Код:
    rd /s /q "c:\ temp" 2>nul  
    echo Please, insert Windows install CD and press Reset.  
    pause 1>nul
    всего две кавычки - и винду переставлять не надо

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2741 | Зарегистр. 15-12-2003 | Отправлено: 00:05 20-05-2009
    Andrey128

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

    Цитата:
    pause 1>nul

    А зачем единичка нужна?

    Всего записей: 408 | Зарегистр. 16-01-2003 | Отправлено: 07:27 20-05-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Andrey128
    Это просто привычка, можно и без нее.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:27 20-05-2009
    Johny_x3mal



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

    Всего записей: 222 | Зарегистр. 07-09-2005 | Отправлено: 09:46 20-05-2009
    khrusTby

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть код  
    Нужно сделать 10 сек. задержку и если юзер ничего не выбрал за 10 сек, то запустить базу 1, а если нажал, то запустить то что он выбрал. Не могу понять как обработать его нажатие, пока идет отсчет времени.  Не сиден я в батниках. Подозреваю, что вопрос глуповат.  
       
    @echo off  
    set nt=  
    set Vib = "0"  
    :_loop    
        SET /A nt=%nt%+1  
        cls      
        echo Через %nt% sec. base "ELEKT" start automatic...    
        ping -n 2 -w 1000 127.0.0.1 > nul  
        if NOT "%nt%"=="10" goto :_loop    
       
    if "%nt%"=="10" set /a Vib = 1  
    if "%Vib%"=="0" set /p "Vib=Enter you base (1 - is ELEKT; 2 - is ANAIS)"    
       
    if "%vib%"=="1" (  
    rem    start D:\1Cv77\Bin\1cv7.exe enterprise  /D "D:\ELEKT")  
    echo elekt  
    if "%vib%"=="2" (  
    rem    start D:\1Cv77\Bin\1cv7.exe enterprise  /D "D:\ANAIS")  
    echo anais  
       
    pause  
       
    rem echo @ exit

    Всего записей: 10 | Зарегистр. 20-05-2009 | Отправлено: 14:00 20-05-2009
    pNcty3

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди хелп! как поменять имя компьютера на введеное, сори за тупой вопрос )

    Всего записей: 1 | Зарегистр. 20-05-2009 | Отправлено: 21:52 20-05-2009
    HaK1R



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    pNcty3
    Мой кмпьютер>свойства>имя кмпьютера>изменить

    Всего записей: 136 | Зарегистр. 04-05-2009 | Отправлено: 07:54 21-05-2009
    Maza_Faka



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

    Цитата:
    как поменять имя компьютера на введеное

    Пример:

    Код:
     
    @Echo Off
     
    Echo Enter a new computer name
     
    Set /P CompName=
     
    Reg Add HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName /V ComputerName /D %CompName% /F
    Reg Add HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName /V ComputerName /D %CompName% /F
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:49 21-05-2009
    khrusTby

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, как сделать составное условие типа,  
    если А не равно 1 И А не равно 2 то что-нить......

    Всего записей: 10 | Зарегистр. 20-05-2009 | Отправлено: 13:35 21-05-2009
    01MDM



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

    Код:
     
    set "a=A"
    if %a% neq 1 (
       if %a% neq 2 echo doing something
    )
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:13 21-05-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 6
    vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru