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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    @echo off
    Set File=test.txt
    Set Num=1
    :Loop
    If Not Exist %File% Goto EndLoop
    For %%a In (%File%) Do (
    Set FName=%%~na
    Set FExt=%%~xa)
    Set NewFName=%FName%_%Num%%FExt%
    Set /a Num=%Num% + 1
    (If Exist %NewFName% Goto Loop) && (Set NewFName=%NewFName%)
    Set File=%NewFName%
    :EndLoop
    Echo %File%
     
    Как в скрипте сделать чтобы "N" в имени файла test_N.txt выбиралось случайным образом, N - случайная цифра или буква (тоесть чтобы в итоге получить не по порядку test.txt test_1.txt test_2.txt, а test.txt test_25.txt test_6.txt и т.д.)?
     

    Всего записей: 8 | Зарегистр. 04-08-2009 | Отправлено: 11:41 26-08-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    tolyn77
    Я не могу проверить, нет второго компа. Наверное так не получится. Для такой команды надо запускать cmd, имхо:

    Код:
     
    psexec %1 -s cmd /c "ver | findstr "XP" 1>nul && echo XP || set winhome=c:\winnt"
     

    Но это не вернет переменную в текущую сессию... Если заменить cmd /c на cmd /k, то можно посмотреть результат выполнения.
     
    Для этого все таки лучше wmic (главное чтоб он был на твоей машине), конечно не проверял:

    Код:
     
    @echo off
    setlocal
     
    for /f "tokens=1,2 delims==" %%i in ('wmic /node:%1 os get caption^,version /value ^| findstr "="') do (
           set "%%i=%%j"
    )
    echo comp %1: %caption%
    echo comp %1: %version%  
     

     
    Посмотри статью http://www.nbuv.gov.ua/books/2003/Win2003/article12.htm

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:04 26-08-2009 | Исправлено: 01MDM, 12:15 26-08-2009
    anachrom

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Кто-нибудь знает как при помощи коммандной строки можно оборвать подключения к файлу. Например файл d:\file.txt открыт на другом компе, а нужно его удалить и не хочится ходить и говорить: "Петя, ...., какого ..., закрывай. А то он у тебя уже третий год открыт", или просто нехочется бегать по офису и искать. кто-же там по моим документам ползает.

    Всего записей: 179 | Зарегистр. 18-11-2008 | Отправлено: 14:05 26-08-2009
    NIKZZZZ



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

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

    Unlocker

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 14:20 26-08-2009
    anachrom

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    NIKZZZZ
    Спасибо конечно, утилита интересная, но меня интересует именно обрыв связи всех подключений к файлу через командную строку. Такое есть?

    Всего записей: 179 | Зарегистр. 18-11-2008 | Отправлено: 16:14 26-08-2009
    NIKZZZZ



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

    Цитата:
    обрыв связи всех подключений к файлу через командную строку.

    unlocker работает из ком. строки, unlocker /? для справки.

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

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

    Цитата:
    unlocker работает из ком. строки, unlocker /? для справки.

    Эт то понятно, что из командно строки и для запуска справки ставим /?, но есть существенный недостаток: её надо ставить.
    Вот нашел "handle". Но пока не разобрался. Если меня кто опередит отпишитесь пжл.

    Всего записей: 179 | Зарегистр. 18-11-2008 | Отправлено: 16:35 26-08-2009
    NIKZZZZ



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

    Цитата:
    её надо ставить.

    Для регистрации Unlocker достаточно следующего рег файла
     

    Код:
    Windows Registry Editor Version 5.00
     
    [HKEY_LOCAL_MACHINE\Software\Classes\CLSID\{DDE4BEEB-DDE6-48fd-8EB5-035C09923F83}\InProcServer32]
    @="c:\\Program Files\\Unlocker\\unlockercom.dll"
    "ThreadingModel"="Apartment"
     
     

     
    Или батник (unlockercom.dll должен быть в каталоге с батником)

    Код:
     
    Reg.exe add "HKLM\Software\Classes\CLSID\{DDE4BEEB-DDE6-48fd-8EB5-035C09923F83}\InProcServer32" /v "" /t REG_SZ /d "%~dp0unlockercom.dll" /f
    Reg.exe add "HKLM\Software\Classes\CLSID\{DDE4BEEB-DDE6-48fd-8EB5-035C09923F83}\InProcServer32" /v "ThreadingModel" /t REG_SZ /d "Apartment" /f
     

     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:25 26-08-2009
    tolyn77



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    с ключем /c  Ты был прав значение переменной не передалось, как и с ключем /k
    что же делать

    Всего записей: 1504 | Зарегистр. 07-09-2004 | Отправлено: 17:30 26-08-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    tolyn77
    Ну если тебе все-таки удобней через psexec, то вариант с временным файлом:

    Код:
     
    @echo off
    setlocal
     
    psexec %1 -s 1>file.txt cmd /c "ver | findstr "XP" 1>nul && echo yes || echo not"
     
    set /p xp=<file.txt
    if %xp%==yes (echo %1 is XP) else (echo %1 is 2000)  
    del file.txt
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:16 26-08-2009 | Исправлено: 01MDM, 23:24 26-08-2009
    Alukardd



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    есть такая трабла принекоторых операциях( видимо ошибочных) батник просто вылетает бесследно... я есть способ предотвратить это? пусть он ругается на экран, я хоть увижу текст ошибки если такой существует!
    вылетает кажется при вводе с клавы чисел с запятой например так - 2,3
    ваще хз что делать? и как кста ввести такое число? или верное это с плавающей точкой? - 2.3??? все равно надо предотвратить ввод чисел с запятой тогда что б не вылетало...

    Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 23:21 26-08-2009 | Исправлено: Alukardd, 23:23 26-08-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alukardd
    Покажи пример батника. Так сложно судить об ошибке.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:27 26-08-2009
    Alukardd



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    блин когда пишу тупо 2 строчки вам для примера все пашет а в большом коде нет!
    вот кароче батник весь
    он конечно большой там еще есть call - это только из-за того что была проблема... вылетал батник и я решил что по причине вложенных if - из-за скобочек.
    вообще мне не понятна причина вылетания!

    Код:
     
    @echo off
    rem #-----------------------------------------------------------
    :headmenu
    rem ##################
    rem ## Главное меню ##
    rem ##################
    cls
    color 17
    echo.
    echo ###   Главное меню:   ###
    echo 1 - Выключение...
    echo 2 - Перезагрузка...
    echo 3 - Выход.
    set /p mod=Выберите требуемое действие:
    if %mod%==1 goto menu
    if %mod%==2 goto menu
    if %mod%==3 goto exit
    echo.
    echo Вы ввели не допустимый аргумент!
    pause
    goto headmenu
    rem ##################
     
    rem #-----------------------------------------------------------
     
    :menu
    rem #####################
    rem ## Меню выключения ##
    rem #####################
    cls
    color 17
    echo.
    echo 1 - Задать таймаут выключения.
    echo 2 - Задать точное время и дату выключения.
    echo 3 - Назад
    set /p when=Выберите режим работы:
    if %when%==1 goto enter
    if %when%==2 goto enter
    if %when%==3 goto headmenu
    echo.
    echo Вы ввели не допустимый аргумент!
    pause
    goto menu
    rem #####################
     
    rem #-----------------------------------------------------------
     
    :enter
    rem ##################
    rem ## Диалог ввода ##
    rem ##################
    cls
    color 17
    if %when%==1 (
        set /p a=Введите время таймера в минутах:
        set /a buf=a*1
        call :1
    )
    if %when%==2 (
        set /p data=Введите дату и время выключения/перезагрузки компьютера:
    )
     
    rem ##################
     
    rem #-----------------------------------------------------------
     
    :1
    rem #################
    rem ## Кусок условия ##
    rem #################
    if %a% NEQ 0 (
        call :2
    ) else (
        if not defined b set b=0
         goto time
    )
    exit
    rem #################
     
    :2
    rem #################
    rem ## Кусок условия ##
    rem #################
    if %buf%==0 (
        goto err
    ) else (
        set /a b=a*60
        goto time
    )
    exit
    rem #################
     
    rem #-----------------------------------------------------------
     
    :err
    rem ##################
    rem ## Ошибка ввода ##
    rem ##################
    cls
    color 47
    echo.
    echo Не допустимое значение!
    echo попробуйте еще раз...
    pause
    goto headmenu
     
    rem #-----------------------------------------------------------
    :data
    rem ####################
    rem ## Обработка даты ##
    rem ####################
    for /f "tokens=1,2,3 delims=." %%a in ("%data%") do (  
        if "%%a" LEQ "00" set not_data=1  
        if "%%a" GTR "31" set not_data=1  
             ...  
        if not defined not_data echo %data%  
    )
    rem ####################
     
    rem #-----------------------------------------------------------
     
    :time
    rem #######################
    rem ## Обработка времени ##
    rem #######################
     
     
    rem #######################
    if %mod%==1 shutdown /s /f /t %b%
    if %mod%==2 shutdown /r /f /t %b%
     
    rem #-----------------------------------------------------------
     
    :exit
    rem ###########
    rem ## Выход ##
    rem ###########
    exit
     

    код ф-ет не весь т.к. не дописан... пока работает только часть с временем( с датой не сделал пока )

    Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 23:45 26-08-2009 | Исправлено: Alukardd, 23:47 26-08-2009
    oshizelly



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

    Цитата:
    Для регистрации Unlocker достаточно следующего рег файла

    Это имеет смысл при наличии портабельной версии, но на оффсайте только инсталлятор. Где бы достать уже распакованный вариант?

    Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 01:01 27-08-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alukardd
    Для отладки:
    Можно закомментировать или убрать @echo off. Замени все `exit` на `goto:eof` и `shutdown` на `echo shutdown`. Вроде на выходе получаются команды с правильным временем, но почему-то по два-три раза. Где-то ты напутал в `call` и `goto time`. В самом конце батника вместо exit поставь pause
     
    Добавь после @echo off команду setlocal, чтоб не было путаницы с переменными при повторном запуске батника.  

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



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    впринципе все так и было в режиме отладки, но для работы все привел в должный вид...
    и pause было и @echo off было в коменте... call работает вроде как надо, если вводить целые числа или буквы... если же ввести число с плавающей точкой тогда он от него воспримет только целую часть... а если с ,  то он просто бесследно исчезает!!!
    setlocal добавил, exit заменил на pause
    вот она суть дела-то!
     
    вопрос о причине вылета при отсутсвии 'call' и наличии вложенных 'if' по прежнему очень интересует... от чего это зависит? блок выглядит так без call

    Код:
     
    if %when%==1 (
        set /p a=Введите время таймера в минутах:
        set /a buf=a*1
        if %a% NEQ 0 (
                 if %buf%==0 (
                         goto err
                 ) else (
                         set /a b=a*60
                         goto time
                 )
         ) else (
                 if not defined b set b=0
                 goto time
         )
    )
     

    Всего записей: 6571 | Зарегистр. 28-08-2008 | Отправлено: 02:24 27-08-2009 | Исправлено: Alukardd, 02:31 27-08-2009
    NIKZZZZ



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

    Цитата:
    Это имеет смысл при наличии портабельной версии, но на оффсайте только инсталлятор.

    Вот версия UnLocker без инсталлятора.  
    Для работы необходимо выполнить Register.bat, при этом unlocker , будет встроен в контекстное меню проводника.
    Если требуется только ком. строка вот батник "портабельной версии" unlocker.exe .
     

    Код:
    Reg.exe export "HKLM\Software\Classes\CLSID\{DDE4BEEB-DDE6-48fd-8EB5-035C09923F83}\InProcServer32" "%Temp%\$Undo$.reg"
    Reg.exe add "HKLM\Software\Classes\CLSID\{DDE4BEEB-DDE6-48fd-8EB5-035C09923F83}\InProcServer32" /v "" /t REG_SZ /d "%~dp0unlockercom.dll" /f
    Reg.exe add "HKLM\Software\Classes\CLSID\{DDE4BEEB-DDE6-48fd-8EB5-035C09923F83}\InProcServer32" /v "ThreadingModel" /t REG_SZ /d "Apartment" /f
    unlocker.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
    Reg.exe delete "HKLM\Software\Classes\CLSID\{DDE4BEEB-DDE6-48fd-8EB5-035C09923F83}\InProcServer32"
    if exist "%Temp%\$Undo$.reg" Reg.exe import "HKLM\Software\Classes\CLSID\{DDE4BEEB-DDE6-48fd-8EB5-035C09923F83}\InProcServer32" "%Temp%\$Undo$.reg"

     
    Sorry, писал это для себя достаточно давно,решал аналогичную задачу, поэтому желательно перепроверить, сам не могу т.к. unlocker уже установлен.
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 04:02 27-08-2009
    tolyn77



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    мне в принципе без разницы как лишь бы можно было получить с удаленной машины версию ОС и потом ее использовать
    в Твоем примере ошибка появляется
    "Непредвиденное появление: (echo."

    Всего записей: 1504 | Зарегистр. 07-09-2004 | Отправлено: 08:10 27-08-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    tolyn77
    Убери последнюю строчку `del file.txt` и посмотри что в него пишется и пишется ли вообще.
    Я пробовал на домашних компьютерах, все работало.
       

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 08:42 27-08-2009
    tolyn77



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    именно так и сделал, все пишет правильно
    что то с if не правильно

    Всего записей: 1504 | Зарегистр. 07-09-2004 | Отправлено: 09:31 27-08-2009 | Исправлено: tolyn77, 09:50 27-08-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