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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka

    Цитата:
    setlocal enabledelayedexpansion  
    , что означает эта команда, а то в справочниках не смог найти...

    Я отвечал на этот вопрос на 28-й странице:

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

     
     
    Добавлено:
    А сам код выполняет следующие действия:
    1. Устанавливает переменную count равной 1.
    2. Для каждой строчки в тексте:
       - проверяет равен ли номер строчки 3, если да - пишет в файл строчку "System".
       - пишет считанную строчку в файл  
       - увеличивает переменную count на 1.

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



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

    Цитата:
    FOR /F "usebackq tokens=1 eol= skip=1 delims= " %%a IN (`help^|findstr /B /V /C:" "`) DO help %%a >>%%a.txt  

    получил файлы, которые перекодировал в кодировку Windows, и сделал удобный HTML-справочник. Вот ссылка: http://www.rapidshare.ru/151926

    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 10:05 23-01-2007
    ViSiToR



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

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

    Имхо, нужно в шапку поместить новый раздел, что-то вроде “Пользовательские описания комманд” (ПОК) - и помещать туда ссылки на такие описания как ты привёл для этой команды.
     
     
    AZJIO

    Цитата:
    Вот ссылка:

    Жду 30 сек., и вижу это:
     

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

     
    Можешь перезалить? например на http://www.sendspace.com/

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 10:40 23-01-2007
    JekaRus

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Как с помощью Bat файла удалить все файлы в папке %systemroot%\Temp на удаленной машине если имя папки с системой неизвестно, то есть оно каждый раз разное, либо WINDOWS, либо WINNT или еще какое нибудь. Шара ADMIN$ тоже отключена.

    Всего записей: 1046 | Зарегистр. 10-08-2005 | Отправлено: 14:12 23-01-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR и All
    Добавил в шапку блок Описания работы команд участниками темы.
    Просьба - пройдитесь по топику и поищите сообщения, которые можно было-бы добавить в этот блок.
     
     

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Имеется, допустим, такой файл temp7.txt

    Код:
    SAGA 61,00 231,11  
    PlayGirl 78,09 356,05  
    Уфа -8,84 -119,77  
    BSC КФХ Славинка 43,23 339,95
    Raul Gonsalez 58,07 344,30  
    Last champion 60,43 354,80  

     
    В конце строк (если в них меньше 5 слов или чисел) имеются пробелы
     
    Можно ли его привести в более удобный для чтения человеком вид. Например такой:

    Код:
    SAGA..........................61,00.....231,11  
    PlayGirl.......................78,09.....356,05  
    Уфа............................-8,84......-119,77  
    BSC КФХ Славинка.....43,23.....339,95
    Raul Gonsalez..............58,07.....344,30  
    Last champion..............60,43.....354,80  

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 15:56 23-01-2007
    AZJIO



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ViSiToR
    Вот новая ссылка... проверил.
    http://www.sendspace.com/file/w3ocs7
    rapidshare.de почему-то у меня перестала работать, а rapidshare.ru я проверил, закачка была.
     
    Есть ли способ включить кодировку? CHCP [nnn] - ? Иначе приходится для создания папок использовать перекодирование в DOS. Попробовал 866, ничего не получилось.

    Цитата:
    xcopy "%UserProfile%\€§Ўа --®Ґ" "%backup%\Documents and Settings\Administrator\€§Ўа --®Ґ" /E /H /K
    xcopy "%UserProfile%\ѓ« ў-®Ґ ¬Ґ-о" "%backup%\Documents and Settings\Administrator\ѓ« ў-®Ґ ¬Ґ-о" /E /H /K


    Всего записей: 4559 | Зарегистр. 03-05-2006 | Отправлено: 22:15 23-01-2007
    ViSiToR



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

    Цитата:
    Вот новая ссылка... проверил.

    Спасибо. Действительно очень удобно получилось - всем советую скачать (27.2 kb), это намного лучше просматривать справку в таком виде, чем в консольном окне (и по необходимости можно скопировать нужную инфу).
     

    Цитата:
    Есть ли способ включить кодировку?

    CHCP 1251 должно помочь.

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

    Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 23:01 23-01-2007
    yurkesha



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

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

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 23:11 23-01-2007
    MMCDion

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, какую команду надо написать в батнике, чтобы выполнить сетевое подключение?
    Подключение ADSL по локальной сети.
    По прикреплённой вверху ссылке "Запуск сетевого подключения" не получается.
    Или может есть возможность запустить ярлык на рабочем столе через bat-файл.
    Путь до ярлыка что-то типа C:\DOCUME~1\0016~1\KRASNE~1.LNK
    Если этот путь вводишь в командной строке, то всё ОК, соединение подключается, а через батник не получается...

    Всего записей: 1 | Зарегистр. 24-01-2007 | Отправлено: 08:07 24-01-2007 | Исправлено: MMCDion, 08:13 24-01-2007
    regular



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет!
    Интересная задачка появилась.
    Есть текстовый файл. Как все буквы перевести в верхний регистр?

    Всего записей: 27 | Зарегистр. 02-11-2004 | Отправлено: 13:01 24-01-2007
    Elroir



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

    Цитата:
    Интересная задачка появилась.

    Для кого интересная?

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    del /q tmp_rep.txt 2>nul
    FOR /f "tokens=*" %%a IN (test.txt) DO (
    SET string=%%a
    SET string=!string:q=Q!
    SET string=!string:w=W!
    SET string=!string:e=E!
    SET string=!string:r=R!
    SET string=!string:t=T!
    SET string=!string:y=Y!
    SET string=!string:u=U!
    SET string=!string:i=I!
    SET string=!string:o=O!
    SET string=!string:p=P!
    SET string=!string:a=A!
    SET string=!string:s=S!
    SET string=!string:d=D!
    SET string=!string:f=F!
    SET string=!string:g=G!
    SET string=!string:h=H!
    SET string=!string:j=J!
    SET string=!string:k=K!
    SET string=!string:l=L!
    SET string=!string:z=Z!
    SET string=!string:x=X!
    SET string=!string:c=C!
    SET string=!string:v=V!
    SET string=!string:b=B!
    SET string=!string:n=N!
    SET string=!string:m=M!
     
    echo !string!>>tmp_rep.txt
    )
    rem del /q test.txt
    rem ren tmp_rep.txt test.txt  
     

    Вместо test.txt, подставляешь имя нужного тебе файла.
    Ограничения:
    1. Батник работает только с английским языком.
    2. Батник удаляет все пустые строчки из файла.
    3. Если в тексте содержатся специальные символы (&,|,..), то во время работы произойдет ошибка - с различными возможными последствиями.

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Задача. Программа создает папки в виде текущей даты DDMMYYYY. Внутри этой папки есть некоторая жестко заданная иерархия папок. Внутри одной из них регулярно создаются файлы. Нужно, просмотреть структуру папок, сравнить с текущей датой, и из одной папки скопировать самый свежий файл.

    Всего записей: 29 | Зарегистр. 11-09-2003 | Отправлено: 14:51 24-01-2007
    Elroir



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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 15:27 24-01-2007
    evgeni666



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Представленный в ветке пример вычисления предыдущей даты не учитывает високосные года, что в следующем году почувствуют многие
     
    Вот правильный алгоритм расчета предыдущей даты.  
     

    Цитата:
     
    @echo off
    for /f "skip=2 tokens=2*" %%i in ('reg QUERY "HKCU\Control Panel\International" /v sDate') do set sdate=%%j
    for /f "delims=%sdate% tokens=1,2,3" %%i in ("%DATE%") do call :getpackage %%i %%j %%k
     
    :: проверочка
    echo %year%
    echo %month%
    echo %day%
    echo %package%
     
     
    :: тут можно поместить необходимые нам команды
     
    goto :EOF
     
    :getpackage
    set day=%1
    set month=%2
    set /a year=%3
    set lastdays="31 28 31 30 31 30 31 31 30 31 30 31"
    if %day% leq 9 set /a day=%day:~-1%
    if %month% leq 9 set /a month=%month:~-1%
    set /a day-=1
    if "%day%"=="0" set /a month-=1
    if "%month%"=="0" set /a month=12,year-=1
    set /a isleap="(year%%4)&((year%%100)|(year%%400))"
    if "%isleap%"=="0" set lastdays=%lastdays:28=29%
    if "%day%"=="0" for /f "tokens=%month%" %%i in (%lastdays%) do set day=%%i
    if %day% leq 9 set day=0%day%
    if %month% leq 9 set month=0%month%
    set package=%year%-%month%-%day%
    goto :EOF
     
     

    Всего записей: 373 | Зарегистр. 22-12-2005 | Отправлено: 16:56 24-01-2007 | Исправлено: evgeni666, 09:59 25-01-2007
    Elroir



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

    Цитата:
    Также он не зависит от используемого в системе представления даты.

    Зависит, зависит. Попробуй запустить его, когда системная дата выглядит так - Wed 24.01.07. Или когда месяц идет перед числом - 01.24.07 (что в западных странах происходит довольно часто).

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:10 24-01-2007
    yurkesha



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

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

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 21:09 24-01-2007 | Исправлено: yurkesha, 21:10 24-01-2007
    Orm

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Легко. Прога создает, как я уже писал, папки с именем DDMMYYYY. Т.е. сегодня это уже 25012007, внутри две папки IN и OUT. В OUT периодически появляется файлы вида 1xxxxxx.01, 1xxxxxx.02, 1xxxxxx.03. Нужно чтобы раз в пять минут сканировала папку соответствующей сегодняшней дате, и из папки OUT копировала файл с последней датой создания. Курил в сторону nnbackup, но пока не еще не раскурил...

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Orm
    Вот теперь понятно. Еще вопрос - каков формат системной даты, т.е. что выдает команда "echo %date%" ?

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 09:42 25-01-2007
    evgeni666



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Уговорил. Зависит. Поправил текст своего сообщения.
     
    Надо покумекать, как получать дату в таком разе...

    Всего записей: 373 | Зарегистр. 22-12-2005 | Отправлено: 10:01 25-01-2007 | Исправлено: evgeni666, 10:06 25-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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru