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

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

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

vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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-файлах (часть 1)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 16:59 14-11-2006 | Исправлено: Elroir, 04:30 26-04-2007
    Elroir



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

    Цитата:
    А все команды rundll32 тут живут  

    Ух ты! Спасибо - давно искал.
    P.S.  Я как-раз хотел спросить "откуда дровишки"

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 02:44 30-01-2007
    ViSiToR



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

    Цитата:
    как запустить свойства папки батником?

    Вот так:
     

    Код:
    RunDll32.exe shell32.dll,Options_RunDLL 0

     
    stalker0

    Цитата:
    Может есть замена этой утилите?

    Я написал примитивную утилиту, не проверял на Win-2000, но думаю будет работать, её кидал уже тут и тут (поправка), но вот кидаю снова (немного обновил её).
     
    SBS (197 kb) - Sleep before shutdown (имя изменил).
     
    Использование:
     

    Код:
    Start SBS 120-m /fs [/hide]

    *Где 120-m это 120 минут ожидания до выключения компьютера - для указания в секундах, вместо -m нужно поставить -s.
    *Где /fs это параметр задающий принудительное выключение компьютера (Force shutdown), для перезапуска, нужно вместо него использовать параметр /fr (Force reboot).
    *Третьий параметр опциональный, если прописать его так: /hide, то перед уходом утилиты в ожидание, она скроет окно батника.
     
    Утилита будет запущена, и если в батнике нет продолжения сценария, то батник будет закрыт, но утилита будет продолжать «ожидать» заданное время. Чтобы запустить утилиту, и ожидать вместе с ней, нужно её запускать с ключом wait:
     

    Код:
    Start /wait SBS 120-m /fs /hide

     
    Чтобы отменить ожидание (т.е закрыть процесс) утилиты, достаточно нажать это сочетание клавиш: Ctrl+Alt+Q
     
    Примечание:
  • Есть ограничение в милисекундах: 2147483647 (24 дня).
     
    Кстати, эта утилита также може служить простому простою, т.е вместо Sleep - для этого нужно задать только первый параметр (120-s), и запускать утилиту с ключом /wait - Start /wait SBS 120-s
     
    Добавлено:
    igor_andreev

    Цитата:
     все команды rundll32 тут живут

    Как ни странно, именно там я и нашёл эту команду (источник ссылки взят из топика по AutoIt на OsZone) .

    ----------
    ViSiToR a.k.a CreatoR
    CreatoR это не ник, CreatoR это стиль жизни!

  • Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 02:44 30-01-2007 | Исправлено: ViSiToR, 23:31 31-01-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    Теперь скрипт путево работает Спасибо.
     
    to all
    И встала следующая проблема (не ожидал, что здесь я затуплю). Итак, получился new_stock.txt:

    Код:
    6,42 9,24 10,55 1,23
    8,92 15,57 20,56 4,39
    -0,59 0,00 -7,54 0,00  
    8,60 14,78 19,31 4,02
    8,69 14,23 18,00 2,48
    8,90 14,77 18,85 2,75

     
    В батнике загружены переменные:

    Код:
    %team_1_name% - Владивосток
    %team_2_name% - Новосибирск
    %team_3_name% - Уфа
    %team_4_name% - Кострома
    %team_5_name% - Оренбург
    %team_6_name% - Томск

     
    Нужно добавить значение переменной %team_1_name% - в начало 1-ой строки new_stock.txt ;
    %team_2_name% - в начало второй строкй; %team_3_name% - в начало 3-ей и т.д.
    Вроде должно быть просто, а все не соображу как.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 02:59 30-01-2007 | Исправлено: Tipulatoid, 03:16 30-01-2007
    igor_andreev

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

    Код:

    @ECHO OFF & SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
     
    SET "team_1_name=Владивосток"
    SET "team_2_name=Новосибирск"
    SET "team_3_name=Уфа"
    SET "team_4_name=Кострома"  
    SET "team_5_name=Оренбург"  
    SET "team_6_name=Томск"
     
    SET /A "COUNT=0"
     
    FOR /F "TOKENS=* DELIMS=" %%A IN (new_stock.txt) DO (
      SET /A "COUNT+=1"
      CALL :write_label "%%A"
    )
    GOTO :EOF
     
    :write_label
    ECHO !team_%COUNT%_name! %~1>>another_stock.txt

    Ты бы уже сразу на vbscript писал бы, им удобней с текстом работать

    Всего записей: 1674 | Зарегистр. 08-12-2004 | Отправлено: 03:27 30-01-2007 | Исправлено: igor_andreev, 03:38 30-01-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Немного не в тему, но всё-таки интересно, можно ли скрыто отформатировать несистемный раздел жёсткого диска при помощи батника...Не подумайте чего плохого, просто интересно
     
    Добавлено:
    Elroir

    Цитата:
    ":~0,-1" - взять все символы из переменной, кроме последнего.  
    Проверь, что у тебя записывается в реестр без этого.

     
    Номано всё записывается
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 07:11 30-01-2007
    Orm

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

    Цитата:
    Orm
    Получилось так:
     
    Код:
     
    @echo off
    setlocal
     
    :: Path where the date folders are
    set work_in_path=c:\temp\
    :: Path for copy
    set copy_to_path=c:\temp\
     
    :copy
    :: Setting work folder
    set work_folder=%date:.=%
     
    :: Change directory to DATE\out folder. If not exists wait
    pushd %work_in_path%%work_folder%\out 2>nul
    if %errorlevel%==1 goto nofolder
     
    :: Finding the name of the file with last creation date
    for /f "usebackq tokens=1" %%a in (`"dir /a-d /od /tc /b"`) do set fname=%%a
     
    :: Copying the file
    copy /y "%fname%" "%copy_to_path%">nul
    popd
     
    :wait
    ::Waiting 5 minutes
    ping -n 300 -w 1000 127.0.0.1>nul
    goto copy
     
    :nofolder
    echo Working folder is not found. Waiting...  
    goto wait
     
     
    Выделенные пути заменить на свои.  

     
    Спасибо, все получилось. Только хотелось чтобы выполнялось еще одно условие. Не копировать обнаруженный файл, если со времени его создания прошло больше 10 минут.  Просто у убрал вот этот кусок  

    Цитата:
     
    :wait
    ::Waiting 5 minutes
    ping -n 300 -w 1000 127.0.0.1>nul
    goto copy
     

    и добавил задание в планировщик с интервалом в 10 минут.
    Сейчас это выглядит так

    Цитата:
     
    @echo off
    setlocal
     
    :: Path where the date folders are
    set work_in_path=z:\programms\financial\exchange\out\
    :: Path for copy
    set copy_to_path=\\FINANCE-0323\C$\out
     
    :copy
    :: Setting work folder
    set work_folder=%date:.=%
     
    :: Change directory to DATE\out folder. If not exists wait
    pushd %work_in_path%%work_folder%\out 2>nul
    if %errorlevel%==1 goto exit
     
    :: Finding the name of the file with last creation date
    for /f "usebackq tokens=1" %%a in (`"dir /a-d /od /tc /b"`) do set fname=%%a
     
    :: Copying the file
    copy /y "%fname%" "%copy_to_path%">nul
    popd
     
    :exit
     

    ...и каждые 10 минут копируется самый свежий файл.

    Всего записей: 29 | Зарегистр. 11-09-2003 | Отправлено: 08:17 30-01-2007 | Исправлено: Orm, 08:18 30-01-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
     
    Вот так тоже работает:  
     
    @Echo off
    Set RegKey=%CD%
    Reg Add HKCU\SOftware\MyProgram /v ProgramPath /t REG_SZ /d %RegKey% /f
     
    И вот так тоже: Reg Add HKCU\SOftware\MyProgram /v ProgramPath /t REG_SZ /d %CD% /f
     


    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:51 30-01-2007 | Исправлено: Maza Faka, 08:52 30-01-2007
    WN688V



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как bat-ом запустить/отключать сетевое подключение
    rasdial - не подходит, имеются в виду именно ЛАН-овские подключения

    Всего записей: 13 | Зарегистр. 01-09-2006 | Отправлено: 11:29 30-01-2007
    Elroir



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

    Цитата:
    Вот так тоже работает

    ОК, просто когда последний символ значения это кавычка, а предпоследний - \, то именно эта (одна) кавычка у меня записывается в реестр в конце значения.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 11:43 30-01-2007
    Elroir



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

    Цитата:
     Не копировать обнаруженный файл, если со времени его создания прошло больше 10 минут.  

    Это достаточно сложно - например, если файл создан вчера в 10:20, а проверка идет сегодня в 10:25, то разница во времени будет 5 минут и файл скопируется. Поэтому всегда надо проверять и число тоже, а это уже большие заморочки

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:14 30-01-2007
    Master Bob



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто подскажет, как через бат файл установить для какой-либо учетной записи срок действия пароля и как сделать, чтобы он был неограничен.
    Если через команду
     
    Цитата:
    net user пользователь пароль /add /expires:never /passwordchg:no /passwordreq:no

     - то устанавливантся только что срок действия САМОЙ УЧЕТКИ неограничен. а пароль со временем заканчивается.
     
     

    Всего записей: 226 | Зарегистр. 27-07-2004 | Отправлено: 14:30 30-01-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Немного не в тему, но всё-таки интересно, можно ли скрыто отформатировать несистемный раздел жёсткого диска при помощи батника...Не подумайте чего плохого, просто интересно

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:20 30-01-2007
    FXPELIVE

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Всем
    Как написать такой пакетник, чтобы он переводил кирилицу в латиницу?
    Например
    Из: Тестовое слово
    В: Testovoje_slovo

    Всего записей: 346 | Зарегистр. 27-04-2006 | Отправлено: 19:19 30-01-2007
    Elroir



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

    Цитата:
    Как написать такой пакетник, чтобы он переводил кирилицу в латиницу?


    Код:
     
    @echo off
    setlocal
    chcp 1251>nul
    set "word=Тестовое слово"
    SET "word=%word:ж=zh%"
    SET "word=%word:Ж=ZH%"
    SET "word=%word:ц=ts%"
    SET "word=%word:Ц=TS%"
    SET "word=%word:ч=ch%"
    SET "word=%word:Ч=CH%"
    SET "word=%word:ш=sh%"
    SET "word=%word:Ш=SH%"
    SET "word=%word:щ=sch%"
    SET "word=%word:Щ=SCH%"
    SET "word=%word:ю=yu%"
    SET "word=%word:Ю=YU%"
    SET "word=%word:я=ya%"
    SET "word=%word:Я=YA%"
    SET "word=%word:а=a%"
    SET "word=%word:б=b%"
    SET "word=%word:в=v%"
    SET "word=%word:г=g%"
    SET "word=%word:д=d%"
    SET "word=%word:е=e%"
    SET "word=%word:ё=e%"
    SET "word=%word:з=z%"
    SET "word=%word:и=i%"
    SET "word=%word:й=j%"
    SET "word=%word:к=k%"
    SET "word=%word:л=l%"
    SET "word=%word:м=m%"
    SET "word=%word:н=n%"
    SET "word=%word:о=o%"
    SET "word=%word:п=p%"
    SET "word=%word:р=r%"
    SET "word=%word:с=s%"
    SET "word=%word:т=t%"
    SET "word=%word:у=u%"
    SET "word=%word:ф=f%"
    SET "word=%word:х=h%"
    SET "word=%word:ъ=`%"
    SET "word=%word:ы=i%"
    SET "word=%word:ь=`%"
    SET "word=%word:э=e%"
    SET "word=%word:А=A%"
    SET "word=%word:Б=B%"
    SET "word=%word:В=V%"
    SET "word=%word:Г=G%"
    SET "word=%word:Д=D%"
    SET "word=%word:Е=E%"
    SET "word=%word:Ё=E%"
    SET "word=%word:З=Z%"
    SET "word=%word:И=I%"
    SET "word=%word:Й=J%"
    SET "word=%word:К=K%"
    SET "word=%word:Л=L%"
    SET "word=%word:М=M%"
    SET "word=%word:Н=N%"
    SET "word=%word:О=O%"
    SET "word=%word:П=P%"
    SET "word=%word:Р=R%"
    SET "word=%word:С=S%"
    SET "word=%word:Т=T%"
    SET "word=%word:У=U%"
    SET "word=%word:Ф=F%"
    SET "word=%word:Х=H%"
    SET "word=%word:Ъ=`%"
    SET "word=%word:Ы=I%"
    SET "word=%word:Ь=`%"
    SET "word=%word:Э=E%"
    SET "word=%word: =_%"
    echo %word%
     

    Добавлено:
    Немного изменил по совету igor_andreev

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:47 30-01-2007 | Исправлено: Elroir, 00:52 31-01-2007
    FXPELIVE

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
    Спасибо, но только почему слово "Ф И О" переводится в "f_i_o__________________________________________________________________"
    Как убрать прочерк после слов?

    Всего записей: 346 | Зарегистр. 27-04-2006 | Отправлено: 19:51 30-01-2007 | Исправлено: FXPELIVE, 19:57 30-01-2007
    Elroir



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

    Цитата:
    Как убрать прочерк после слов?

    Убедиться, что после Ф И О нет пробелов, так как батник заменяет все пробелы знаком подчеркивания.
     
    Добавлено:
    А... понял - удали все пробелы в конце строк батника
     
    Добавлено:

    Цитата:
    Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!


    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 20:03 30-01-2007
    FXPELIVE

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
    Всё ОК! Ещё раз спасибо.

    Всего записей: 346 | Зарегистр. 27-04-2006 | Отправлено: 20:08 30-01-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Кстати, к вопросу о гадских пробелах на ru-board при копировании, обрати внимание, как я написал свой предыдущий пост для Tipulatoid
    SET "team_1_name=Владивосток"
    SET /A "COUNT+=1"
    и т.п. Брал значения в кавычки, так можно. В строчке:
    CALL :write_label "%%A" значение %%A тоже передал в кавычках и в метке :write_label убрал кавычки тильдой %~1. Как результат - все работает при копировании с форума. В твоем примере тоже, если взять все присвоения значений в кавычки вместо:
    SET word=%word:ж=zh%
    написать:
    SET "word=%word:ж=zh%"
    все будет работать при копировании. Не панацея конечно, но хоть как-то

    Всего записей: 1674 | Зарегистр. 08-12-2004 | Отправлено: 20:14 30-01-2007 | Исправлено: igor_andreev, 20:45 30-01-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    OK, возьму на вооружение, спасибо!
    Кстати, код замены букв, если не ошибаюсь, я взял у тебя

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 20:21 30-01-2007
    rbcl

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот задачка встала тут передо мной. Найти запущенные службы по маске и тормознуть их. Пол скрипта вроде сделал. а на остальное не хватает. Вообщем имею на выходе в стандартном потоке список нужных служб. Как применить цикл "for" чтобы сделать "net stop" каждой из них?  

    Всего записей: 22 | Зарегистр. 02-11-2005 | Отправлено: 20:41 30-01-2007
       

    Страницы: 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-файлах 2
    vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru