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

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



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

    Цитата:
    как из переменной скажем %URL% удалить обрамляющие кавычки ?


    Код:
     
    set "URL=%URL:~1,-1%"
     



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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 15:08 26-04-2009
    vitaliy91

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

    Всего записей: 37 | Зарегистр. 16-11-2008 | Отправлено: 17:53 26-04-2009
    smirnvlad

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

    Код:
     
    @echo off
     
    echo %1
    echo %~1
     
    for /f "delims= " %%a in (""bla"") do (
    echo %%a
    echo %%~a
    )
     

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 18:21 26-04-2009 | Исправлено: smirnvlad, 18:23 26-04-2009
    Raf_SE



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А можно с помощью батника, корректно завершить процесс infium.exe? Мне нужно не "убить", а именно завершить?
    Или мож для этого есть какиенить другие проги?..

    ----------
    «Фашисты будущего будут называть себя антифашистами» ©

    Всего записей: 1142 | Зарегистр. 06-08-2006 | Отправлено: 18:23 26-04-2009
    smirnvlad

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

    Цитата:
    И в full.cmd добавить обратно запуск proc.cmd
     
    В proc.cmd добавить перезагрузку системы
     

    Насколько я вижу, это уже есть
     

    Цитата:
     
    Нужно чтобы proc.cmd ещё и сохранял в текстовый файл значение, которое он добавил в реестр, и запускал другой батник (новый) - он собственно и должен добавляться в автозагрузку, который будет при запуске вбивать в тот же ключ реестра что и proc.cmd значение из нового текстового файла.
     


    Цитата:
     
    И ещё, нужно чтобы новый батник после запуска, выполнялся не сразу, а скажем через секунд 20
     

    Если текстовый файл неважен, то proc.cmd создаёт proc.cmd.static.cmd и добавляет его в автозапуск, в proc.cmd.static.cmd задержка 20 секунд и добавление в реестр выбранного процессора.
     
    full&proc&static.zip
     
     
    Цитата:
    И ещё, пожалуйста приведи пример кода, который копирует файл из одного каталога в другой.

     

    Код:
     
    copy "c:\1.txt" "c:\1\1.txt" /y
     

    копирует файл 1.txt из c:\ в c:\1\
    "/y" перезаписывает существующий фал без запроса
     

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 19:34 26-04-2009
    vitaliy91

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В чем ошибка покажите пожалуйста
    Почемуто изза метки goto :back  цикл выполняется только один раз:
    Мне нужно чтобы пока на диске есть файла 1.txt все время происходила пауза, а когда он исчезнет, увеличить переменную на еденицу, и повторить все вновь. Но если появится файл 2.txt, завершить цикл и пойти далее
    Вот примерно как я делаю:

    Цитата:
     
    set url=http
    for /L %%n in (1,1,255) do (
    copy D:\1.txt C:\1.txt /q /f
    echo %url%%%n
    :back
    if exist C:\1.txt (
    ping localhost -n 5
    goto :back)
    if exist C:\2.txt goto :next
    )
    :next
    echo END
     

    Всего записей: 37 | Зарегистр. 16-11-2008 | Отправлено: 20:47 26-04-2009 | Исправлено: vitaliy91, 20:49 26-04-2009
    king_stiven

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

    Код:
    set url=http
    for /L %%n in (1,1,255) do (
    copy D:\1.txt C:\1.txt /q /f
    echo %url%%%n
    call :back
    )
    :next
    echo END
    goto :eof
    :back
    if exist C:\1.txt (
    ping localhost -n 5
    goto back
    )
    if exist C:\2.txt goto :next

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:01 26-04-2009 | Исправлено: king_stiven, 22:04 26-04-2009
    ju ja

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    помогите пожалуйста отладить батник
    for /r "L:\" %%a in (*.*) do for /f "tokens=1,2,3,4,5 delims=,. " %%c in ("%%~ta") do (  
    set f_time=%%f  
    set /a t6= !f_time:~0,1! * 600 + !f_time:~1,1! * 60 + !f_time:~3,1! * 10 + !f_time:~4,1!  
    set /a t3= %time:~0,1% * 600 + %time:~1,1% * 60 + %time:~3,1% * 10 + %time:~4,1%  
    if %t6% LSS %t3% echo del %%a  
    )  
     
    не видит он !f_time:~x,x!  

    Всего записей: 10 | Зарегистр. 22-03-2009 | Отправлено: 23:07 26-04-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ju ja
    setlocal enabledelayedexpansion
    в начале батника не потерял?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 00:16 27-04-2009
    vitaliy91

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Большое спасибо king_stiven
     
    Добавлено:
    а как можно получть имя файла если известно его расширение, например txt и известно что в папке всего один файл txt ?

    Всего записей: 37 | Зарегистр. 16-11-2008 | Отправлено: 00:25 27-04-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vitaliy91
    for %%a in (t:\2\*.txt) do set "name=%%~na"

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 01:12 27-04-2009
    vitaliy91

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

    Цитата:
     
    for %%a in (t:\2\*.txt) do set "name=%%~na"
     

    Что-то не выходит, ошибки нет но переменная %name% пуста(

    Всего записей: 37 | Зарегистр. 16-11-2008 | Отправлено: 01:50 27-04-2009 | Исправлено: vitaliy91, 01:51 27-04-2009
    alexander6161



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто пользуется утилитой NirCmd, подскажите как передать значение переменной (например, ~$folder.nircmd$) из NirCmd в батник? Надо, чтобы переменная %A% (батник) приняла значение переменной ~$folder.nircmd$ (NirCmd). Вызов NirCmd.exe находится в середине батника:
     
    Начало батника...
    NirCmd.exe ... ~$folder.nircmd$
    Продолжение батника...
     
    Прочитал справку на английском для NirCmd.exe, но сам не смог разобраться.

    Всего записей: 185 | Зарегистр. 17-08-2008 | Отправлено: 03:39 27-04-2009 | Исправлено: alexander6161, 03:42 27-04-2009
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vitaliy91
     
    поиск файла в папке c:\, если надо в текущей папке, то "C:\*.txt" заменить на "*.txt"

    Код:
     
    for %%a in ("C:\*.txt") do set "name=%%~na"
     

    если файл скрытый, он не будет найден
     

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 07:22 27-04-2009
    01MDM



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

    Код:
     
    @echo off
     
    set exec=nircmdc execmd echo ~$folder.desktop$
     
    for /f "tokens=*" %%i in ('%exec%') do set "desk=%%i"
    echo %desk%
     


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



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

    Цитата:
     
    корректно завершить процесс infium.exe
     

    C помощью утилиты nircmd.exe:

    Код:
     
    nircmd.exe closeprocess infium.exe
     

     
    Добавлено:
    smirnvlad
    vitaliy91

    Цитата:
    если файл скрытый, он не будет найден

    Вот так будет найден:

    Код:
     
    For /F %%A In ('Dir C:\*.txt /B /A:-D') Do Echo %%A
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:53 27-04-2009
    Hiveno

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

    Цитата:
    В случае если батник зависнет, то и в этом  
     

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

     
     
    и в этом  
     

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

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

     
    С файловым флагом как раз и имею проблемы ручного удаления.
    Как я понимаю, лучше использовать шедулер - он два экземпляра точно не запустит и восстанавливается при аварийном завершении нормально.

    Всего записей: 3 | Зарегистр. 22-04-2009 | Отправлено: 10:59 27-04-2009
    alexander6161



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM спасибо.
     
    Просто я использую nircmd.exe (можно выводить сообщения infobox с нужной иконкой на кнопке и в заголовке, если его разжать и вставить в него иконку), поэтому нет желания городить огород и таскать обе утилиты (+nircmdc.exe). Может есть способ получить через nircmd.exe?
     
    Пока перекидываю значение через реестр:
    Код:
    nircmd.exe regsetval sz "HKEY_CURRENT_USER\NirCmd" "Value" "~$folder.nircmd$"
    for /f "tokens=3 usebackq delims=    " %%I in (`reg query "HKEY_CURRENT_USER\NirCmd" /v Value`) do set A=%%I
    echo %A%
     
    После delims= стоит Tab, но форум подставляет вместо него четыре пробела - исправьте после копирования.

    Итак, вопрос:
    Как передать значение переменной (например, ~$folder.nircmd$) из NirCmd.exe в батник? Надо, чтобы переменная %A% (батник) приняла значение переменной ~$folder.nircmd$ (NirCmd). Вызов NirCmd.exe находится в середине батника:
     
    Начало батника...
    NirCmd.exe ... ~$folder.nircmd$
    Продолжение батника...
     
    Может можно назначить значение переменной %A% прямо в NirCmd.exe? Там есть возможность получать значение любой переменной батника ~$sys.varname$ (например, значение %A% - ~$sys.A$). Может можно его прямо там как-то задать?

    Всего записей: 185 | Зарегистр. 17-08-2008 | Отправлено: 12:04 27-04-2009 | Исправлено: alexander6161, 12:26 27-04-2009
    01MDM



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

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

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

    Цитата:
    Вот так будет найден:
     
    Код:
     
    For /F %%A In ('Dir C:\*.txt /B /A:-D') Do Echo %%A
     
     

     
    и еще добавить "tokens=*", на случай пробела в названии файла

    Код:
     
    For /F "tokens=*" %%A In ('Dir C:\*.txt /B /A:-D') Do Echo %%A
     

     
     
     
    Hiveno

    Цитата:
    Как я понимаю, лучше использовать шедулер - он два экземпляра точно не запустит и восстанавливается при аварийном завершении нормально.
     

    главное чтобы мимо планировщика не запускали

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 17:47 27-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