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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Привет ALL!
     
    А вы как-то в батнике удаляете временные файлы? я создаю вот такой cmd и пихаю его в шедулер ночью:
     

    Цитата:
    del %TEMP%\*.*. /s

     
    Проблема в том, что некоторые файлы могутт быть заняты, и операция прерывается на первом таком файле. Можно как-то стандартными командами как-то "обойти" этот файл и удалить остальные?

    ----------
    Чтобы иметь большой гардероб - надо иметь большой гардероб. разработка под sharepoint

    Всего записей: 791 | Зарегистр. 05-08-2006 | Отправлено: 14:01 24-04-2009
    01MDM



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

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:03 24-04-2009
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Collapse_Troll
    воспроизвожу ситуацию:
    создаю несколько архивов для удаления
    создаю архив с паролем, пытаюсь его распаковать, пароль не указываю
    начинаю удаление, все файлы удаляются без запинок, кроме занятого (по причине "занятости" — не введённого пароля)
    ситуация не воспроизводится
     
    попробуй ключ /q
    del/q %temp%\*
    а лучше так:
    Код:
    cd/d "%temp%"&rd/s/q .

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 14:47 24-04-2009
    ZeroCrash



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    01MDM
     
    Спасибо. Всё ок, кроме команды из четвёртого батника (про процессоры)

    Всего записей: 43 | Зарегистр. 15-04-2009 | Отправлено: 15:16 24-04-2009
    Boxa_win

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Может кто нибудь помоч:
    как в Bat или CMD файле получить IP клиента, открывающего терминальную сессию на сервере

    Всего записей: 8 | Зарегистр. 23-04-2009 | Отправлено: 15:17 24-04-2009
    Elroir



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

    Цитата:
    Когда в тексте попадаются значки  
    ">" "<" и "&" выполнение прерывается... Можно както обойти это припятствие ?

    Попробуй так:

    Код:
     
    @echo off
    setlocal
    for /f "tokens=*" %%a in (input.txt) do (set "line=%%a" & call :presplit)
    goto :EOF
    :presplit
    set "line=%line:<=%"
    set "line=%line:>=%"
    set "line=%line:&=%"
    :split
    echo %line:~0,255%>>output.txt
    if not "%line:~255%"=="" (set "line=%line:~255%" & goto split)
     

     


    ----------
    "В интернете есть все, но не всегда"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:00 24-04-2009
    Collapse_Troll

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

    Цитата:
    rd "%temp%" /s /q


    ----------
    Чтобы иметь большой гардероб - надо иметь большой гардероб. разработка под sharepoint

    Всего записей: 791 | Зарегистр. 05-08-2006 | Отправлено: 17:05 24-04-2009
    01MDM



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

    Цитата:
    Всё ок, кроме команды из четвёртого батника (про процессоры)

     
    Попробуй так:
     

    Код:
     
     
    ....
     
    :4
    for /f "tokens=*" %%i in (processors.txt) do call:set "%%i"
    for /f "tokens=3* delims=_=" %%i in ('set value_') do set "randomValue=%%i %%j"
     
    reg add "%regpath_2%" /v "ProcessorNameString" /t reg_sz /d "%randomValue%" /f
     
    call:unset  
    goto:eof
     
    ....
     
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:35 24-04-2009
    Bad_BoY



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Вот нашел решение своей проблемы вот таким скриптом:

    Код:
     
    Set objShell = WScript.CreateObject("WScript.Shell")
    Set objNet = CreateObject("WScript.Network")
    strCompName = objNet.ComputerName
     
    IF left(strCompName,2) = "AA" THEN
    objShell.Run "net use g: /delete"
    objShell.Run "net use g: \\servername_1\t"
    END IF
     
    IF left(strCompName,2) = "BB" THEN
    objShell.Run "net use g: /delete"
    objShell.Run "net use g: \\servername_2\t"
    END IF
     
    IF left(strCompName,2) = "CC" THEN
    objShell.Run "net use g: /delete"
    objShell.Run "net use g: \\servername_3\t"
    END IF
     

    Синхронизацию настроил с помощью программы Handy Backup Pro.
     
    Но вопрос остался, как сделать это все не скриптом vbs, а сделать bat файликом?

    Всего записей: 179 | Зарегистр. 22-08-2001 | Отправлено: 19:17 24-04-2009 | Исправлено: Bad_BoY, 19:19 24-04-2009
    ZeroCrash



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    01MDM
    Всё равно проц тот же остался(
     
    Но я понял в чём дело. Просто после перезагрузки значение восстанавливается.
    Спасибо за всё!
     
    Добавлено:
    Всё же есть проблемка, которую я тоже не могу решить)
     
    Нужно чтобы батник, который меняет проц. запускался после выполнения общего батника (перезагрузку ставить вообще не надо). При его выполнении нужно чтобы он добавил себя в автозагрузку и выставлял при каждом следующем запуске одно и то же значение, которое он выбрал случайным образом в первый раз.
     
    Может ты придумаешь вариант получше, но у меня есть такие идеи:
    Нужно чтобы батник либо записал куда-то отдельно значение, а потом уже от туда вписывал его в реестр
     
    Либо чтобы он из текстового файла затирал остальные варианты
     
    Либо чтобы он сохранил значение отдельно и добавлял в автозапуск другой батник, который в свою очередь и будет вписывать значение в реестр из того файла, в который сохранил значение тот батник
     
     
    Вот ветка реестра для автозагрузки:
    HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v proc /d C:\proc.bat

    Всего записей: 43 | Зарегистр. 15-04-2009 | Отправлено: 20:10 24-04-2009 | Исправлено: ZeroCrash, 21:14 24-04-2009
    WSQRT

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ламерский вопрос.
    Я не помню, но точно видел где-то, что из BAT файла можно вызвать сообщение в окне с помощью какого-то скрипта.
    Тоесть оконное сообщение с кнопкой "ОК"  
     
    Я раньше так делал, но к сожалению забыл как
    Подскажите пожалуйста?
     
     

    Всего записей: 2 | Зарегистр. 13-04-2009 | Отправлено: 21:50 24-04-2009
    NvvLazyTiger



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hiveno
    Цитата:
    На сервере по шедулеру периодически раз в сутки запускается батник, вызывает несколько внешних задач. Юзерам позволено запускать этот батник в произвольный момент времени.  
    Одновременный запуск двух копий задачи допускать нельзя.  
    Можно решить протсым файлом, кторый создает батник при старте и удаляет при выходе - работает / не работает.  
    Может зашедулить и разрешить юзерам запускать задачу, а шедулер пусть не допускает повторного запуска - задача и так работает?
    Указанными способами поставленная задача корректно не решается. А решается она следующим образом:
    1. В определённое место заранее укладывается файл-флаг "можно" (например: DoJob.Ok).
    2. Стартующий батник генерирует случайный литерал ("TmpXXX") и пытается переименовать файл-флаг в этот литерал  ("захватить флаг").
    3. Удалось (есть желанный TmpXXX.Run) - работаем, нет - не судьба.
    4. Отработавший батник переименовывает захваченный файл-флаг взад.

    ;)

    Всего записей: 257 | Зарегистр. 14-02-2009 | Отправлено: 08:47 25-04-2009
    smirnvlad

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

    Код:
     
    @echo off
     
    @echo Running on %COMPUTERNAME%
     
    if "%COMPUTERNAME:~0,2%"=="AA" (
      @echo Name starts with AA
      net use g: /delete
      net use g: \\servername_1\t
    )
     
    if "%COMPUTERNAME:~0,2%"=="BB" (
      @echo Name starts with BB
      net use g: /delete
      net use g: \\servername_2\t
    )
     
    if "%COMPUTERNAME:~0,2%"=="CC" (
      @echo Name starts with CC
      net use g: /delete
      net use g: \\servername_3\t
       
    )
     

     
     
    Добавлено:
    WSQRT
    Батники сами не могут показывать сообщения, возможно несколько вариантов
     
    1. отправить себе сообщение через msg

    Код:
     
    msg %username% "Messasage to user"
     

     
    2. Использовать VBScript *.vbs вместо *.bat или запускать vbs из bat
     
    файл vbs:

    Код:
     
    msgbox "Msg", vbOKOnly, "Caption"
     

     
     
     
    Добавлено:
    NvvLazyTiger

    Цитата:
    Отработавший батник переименовывает захваченный файл-флаг взад.

     
    А что если батник прервется во время выполнения?
     
     
    Hiveno
    Можно решить так
    батник который что-то делает task.bat
     
    батник который запускает первый task_run.bat

    Код:
     
    task.bat > task.lck
     

     
    и пользователи и шедулер запускают task_run.bat
    если происходит второй запуск то выведется сообщение о занятости файла другим процессом
    проверить можете выполнив

    Код:
     
    start task_run.bat & start task_run.bat
     

     
    в task_run.bat путь к файлу task.lck лучше прописать полный чтобы при запуске из разных папок он создавался всегда в одном месте

    Код:
     
    task.bat > %~dpn0.lck
     

    файл в той же папке что и task_run.bat с именем этого файла, расширение .lck

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 09:03 25-04-2009 | Исправлено: smirnvlad, 10:09 25-04-2009
    01MDM



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

    Цитата:
    Нужно чтобы батник, который меняет проц. запускался после выполнения общего батника (перезагрузку ставить вообще не надо). При его выполнении нужно чтобы он добавил себя в автозагрузку и выставлял при каждом следующем запуске одно и то же значение, которое он выбрал случайным образом в первый раз.

     
    Читаю, но суть ускользает. Объясни по пунктам.
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:15 25-04-2009
    ZeroCrash



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    01MDM
     
    1)Нужно из батника full удалить 4 пункт.
    2)Удалить из батника full команду перезагрузки.
    3)Создать батник, который бы выполнял вот этот код:
     

    Код:
    @echo off
    setlocal
     
     
    set regpath=HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0
     
    for /f "tokens=*" %%i in (processors.txt) do call:set "%%i"
    for /f "tokens=3* delims=_=" %%i in ('set value_') do set "randomValue=%%i %%j"
     
     
    reg add "%regpath%" /v "ProcessorNameString" /t reg_sz /d "%randomValue%" /f
     
    goto:eof
     
    :set
    set "value_%random%=%~1"  
    shutdown /r /t o

    И назвать его proc.bat
     
    4)Добавить в батник full команду, которая добавляла бы вот такую запись в реестр:
    HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v proc /d C:\proc.bat
     
    Усё)

    Всего записей: 43 | Зарегистр. 15-04-2009 | Отправлено: 12:41 25-04-2009
    NvvLazyTiger



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Гм-м-м,.. smirnvlad, верну "комплимент":
    Цитата:
    task.bat > task.lck
    А что будет, если батник зависнет? Вот то-то и оно... ;)
     
    Т.е. те или иные "простые" абстрактные решения в правильно построенной технологической среде (автоматической отработки поставленных задач) превращаются в "сложные" конкретные-с. Например, у меня файлы удаляет ChkAndDel.Cmd (72 строки, 2369b) и там много чего есть для удобного использования [в других батниках].
     
    Но, как говорится, "на вкус и цвет..."

    Всего записей: 257 | Зарегистр. 14-02-2009 | Отправлено: 14:02 25-04-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZeroCrash
    Запись для автозагрузки добавляется из proc.cmd, который вызывается из full.cmd. Эти батники должны быть в одной папке.
    full&proc.zip

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:30 25-04-2009
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NvvLazyTiger
    В случае если батник зависнет, то и в этом

    Цитата:
    task.bat > task.lck  

    и в этом

    Цитата:
    # В определённое место заранее укладывается файл-флаг "можно" (например: DoJob.Ok).
    # Стартующий батник генерирует случайный литерал ("TmpXXX") и пытается переименовать файл-флаг в этот литерал  ("захватить флаг").
    # Удалось (есть желанный TmpXXX.Run) - работаем, нет - не судьба.
    # Отработавший батник переименовывает захваченный файл-флаг взад.

    случаях он будет висеть и следующий не запустится, то есть одинаково
     
    Но вот если во время работы или зависания батника компьютер перезагрузить, в одном случае батник опять будет запускаться по шедулеру, а в другом надо ещё создать файл разрешения работы.

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 18:04 25-04-2009
    ZeroCrash



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    01MDM
    Спасибо!
    Но извини меня за глупость) Так не покатит(
     
    Нужно во всю эту лабуду добавить такое:
     
    Нужно чтобы proc.cmd ещё и сохранял в текстовый файл значение, которое он добавил в реестр, и запускал другой батник (новый) - он собственно и должен добавляться в автозагрузку, который будет при запуске вбивать в тот же ключ реестра что и proc.cmd значение из нового текстового файла.
     
    И в full.cmd добавить обратно запуск proc.cmd
     
    В proc.cmd добавить перезагрузку системы
     
    И ещё, нужно чтобы новый батник после запуска, выполнялся не сразу, а скажем через секунд 20
     
    Заранее благодарен!
     
    Добавлено:
    И ещё, пожалуйста приведи пример кода, который копирует файл из одного каталога в другой.

    Всего записей: 43 | Зарегистр. 15-04-2009 | Отправлено: 23:52 25-04-2009 | Исправлено: ZeroCrash, 02:54 26-04-2009
    vitaliy91

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста как из переменной скажем %URL% удалить обрамляющие кавычки ?
    Никак немогу разобраться с FOR...

    Всего записей: 37 | Зарегистр. 16-11-2008 | Отправлено: 14:41 26-04-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