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

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

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

vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах
(часть 1, часть 2)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:54 27-04-2007 | Исправлено: Elroir, 03:59 10-09-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JohnRD
    Либо воспользоваться командой ping:

    Код:
    ping -n количество_секунд -w 1000 127.0.0.1>nul

    Либо утилитой sleep.exe, входящей в состав Resourcr Kit-а:

    Код:
    sleep количество_секунд


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 11:12 13-06-2007 | Исправлено: Elroir, 03:43 14-06-2007
    twister2001

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо всем откликнувшимся! Буду пробовать

    Всего записей: 2 | Зарегистр. 14-04-2007 | Отправлено: 12:26 13-06-2007
    Maza Faka



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

    Цитата:
    если прога не успевает создать файл  
    а for уже проверяет папку, можно ли задержать как-то ?

    Ты имеешь в виду, если программа ещё не закончила создание файла? Можно так:

    Код:
     
    @echo off
    :begin
    ping -n 11 localhost>nul
    for /f "tokens=*" %%a in ('dir /b /s /a:-d /od /tc d:\movie\ 2^>nul') do ren %%a %%~nxa && set new=%%a || goto begin
    ..........
    ...your code...
     

    здесь файл переименовывается на одноимённое имя, и если файл используется программой (значит он ещё не создан), соответственно вернётся код ошибки и произойдёт переход к метке ":begin", будет выдержана пауза в 10 сек. и снова будет произведена попытка переименования файла и т.д. пока файл не создастся.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:25 13-06-2007
    LightSoft



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Почитал вашу переписку -- нашёл много интересного и нового для себя!
    Может невнимательно смотрел, но не нашёл нужного для меня момента... я пока ещё начинающий, так сказать нюб, если можно помогите , заранее благодарен!
    Суть :
    ver |find "4." && for /f "tokens=1,2" %%u in ('date /t') do set d=%%v
    ver |find "5.0" && for /f "tokens=1,2" %%u in ('date /t') do set d=%%v
    ver |find "5.1" && for /f %%u in ('date /t') do set d=%%u
     
    set YYYYMMDD=%d:~6,4%%d:~3,2%%d:~0,2%
    set DDMMYY=%d:~0,2%%d:~3,2%%d:~8,2%
    set YYMMDD=%d:~8,2%%d:~3,2%%d:~0,2%
     
    Этот фрагмент текста честно содрал у предидущего сотрудника, на сколько я понял благодаря этому можно ссылаться либо создавать каталоги и файлы в виде текущей даты( но собственно самого текста я не понимаю -- если несложно проведите плз ликбез). Под ХР-pro и 2000-serv работало нормально, но после переноса на платформу  2003-serv батник перестал понимать даты и естественно не находит то, что нужно!
    Помогите пожалуста!

    Всего записей: 8 | Зарегистр. 13-06-2007 | Отправлено: 16:58 13-06-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    LightSoft
    Введи Date /t и что она дает
    У меня есть подозрение, что
    пн, 01/05/2006  
    а на ХР
    01/05/2006
    Правится в региональных настройках и языках - формат времени

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:25 13-06-2007
    wolf0425



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

    Цитата:
    а на ХР 01/05/2006  

    в региональных настройках оно действительно правится, но проще без проверки версий ОС писать, типа  
    set d=%date:~-10%
    set YYYYMMDD=%d:~6,4%%d:~3,2%%d:~0,2%
    set DDMMYY=%d:~0,2%%d:~3,2%%d:~8,2%
    set YYMMDD=%d:~8,2%%d:~3,2%%d:~0,2%
    а вот русский порядок дата-месяц-год в настройках надо проконтролировать...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 18:02 13-06-2007 | Исправлено: wolf0425, 18:45 13-06-2007
    LightSoft



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Что-то не получаеться :
    пробовал date /t выдаёт и на ХР и на 2003 : 13.06.2007
    Форматы времени на 2003 выставлял идентичными с ХР -- всё равно не работает!  
     
    Когда запускаю просто то выдаёт : D:\archive\~0 2%d:~3,2%d:~8,2\ADMIN
    Когда делаю так, как сказал wolf0425, то : D:\archive\dae: \ADMIN\
     
    Может я что-то не так понял ... :(

    Всего записей: 8 | Зарегистр. 13-06-2007 | Отправлено: 18:31 13-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LightSoft
    У меня такое впечатление, что на Win2003 просто не выполняется ни одно из трех условий (три первые строчки), поэтому не определяется переменная d и соответственно ничего не работает.
    Что выдает команда "ver" на Win2003?

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:39 13-06-2007
    wolf0425



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

    Цитата:
    Когда делаю так, как сказал wolf0425, то

    у меня там тильда куда-то потерялась, %date:~-10%

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 18:47 13-06-2007
    LightSoft



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
     
    2003 :
    Microsoft Windows [Версия 5.2.3790]
    ХР :
    Microsoft Windows XP [Версия 5.1.2600]
     
    Ты прав...судя по всему именно это -- а как прописать правильно -- я просто не понимаю сути кода по проверки версии ... молод ещё :)
     
    wolf0425
    ООООО
    Вот теперь заработало супер! Огромное спасибо -- и всё же может мне кто-то доступно объяснить суть приведённого мною кода -- хочеться разобраться по полной, так сказать ! Буду благодарен!

    Всего записей: 8 | Зарегистр. 13-06-2007 | Отправлено: 18:50 13-06-2007 | Исправлено: LightSoft, 18:54 13-06-2007
    Maza Faka



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

    Цитата:
     может мне кто-то доступно объяснить суть приведённого мною кода

    SET /?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 19:02 13-06-2007
    wolf0425



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

    Цитата:
    просто не понимаю сути кода по проверки версии ...

    ver |find "4." && for /f "tokens=1,2" %%u in ('date /t') do set d=%%v  
    выполнить команду ver, вывод перенаправить (|) в команду find "4."
    если find завершилась с нулевым кодом ошибки (т.е. в выводе ver есть сочетание 4. - т.е. ОС winNT4.0)
    то выполнить следующую за && часть строки: с помощью команды for получить в переменной d второе (%%v) слово от вывода команды date /t
    дальше с помощью команд set из %d% нарезать и склеить куски...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:15 13-06-2007 | Исправлено: wolf0425, 19:18 13-06-2007
    Elroir



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

    Цитата:
    в региональных настройках оно действительно правится, но проще без проверки версий ОС

    В Win2000 и ниже не определена переменная date.
     
    LightSoft
    Как альтернатива тому, что привел wolf0425 и для того, чтобы батник продолжал работать в любых NT системах, добавь к батнику, четвертую строчку:
    ver |find "5.2" && for /f %%u in ('date /t') do set d=%%u
     

    Цитата:
    всё же может мне кто-то доступно объяснить суть приведённого мною кода  

    В первых, теперь уже четырех строках, проверяется версия операционной системы (ver | find "...") и в зависимости от результата, определяется переменная d, в которую и записывается текущая дата. Проверка делается потому, что в разных NT системах дата выводится немного по разному.
    А дальше создаются переменные с разным форматом даты - из переменной d вытаскиваются подстроки определяющие день, месяц и год и компонуются в зависимости от определяемого формата.
    Техническую сторону надо смотреть в ответе Maza Faka
     

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:17 13-06-2007 | Исправлено: Elroir, 19:19 13-06-2007
    wolf0425



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

    Цитата:
    В Win2000 и ниже не определена переменная date.
    я сидел на win2000 когда то писал, и проверил - есть она там.
     
    вот в WinNT (4.0) - переменной может и нет, но это ныне мало кому интересно.
    Хотя если совместимость с winNT4 нужна - можно не разбирая версий в одну строку переопределить %date%
    for /f "delims=" %%a in ('date /t') do set "%date%=%%a"
    и далее по моему варианту...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 19:20 13-06-2007 | Исправлено: wolf0425, 19:28 13-06-2007
    LightSoft



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Огромное всем спасибо -- плод для размышлений получил! Буду учиться и рости над собой :)
     

    Всего записей: 8 | Зарегистр. 13-06-2007 | Отправлено: 19:22 13-06-2007
    Elroir



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

    Цитата:
    я сидел на win2000 когда то писал, и проверил - есть она там

    Действительно есть. Перепутал

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:39 13-06-2007
    sadmn



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как лучше переделать проверку на то, изменился ip или нет, если
    искомый IP (внешний) выходит первым, а не вторым, как в решении на 10 странице?
    Можно ли сделать, чтобы то, что сейчас делает строка
    for /f "tokens=1* delims=:. " %%a in ('ipconfig ^| find "IP"') do set "old_address=%%b"
    ограничивалось первым найденным "IP"?
    ответ ipconfig
     
    Спасибо!

    Всего записей: 1354 | Зарегистр. 04-06-2006 | Отправлено: 17:30 14-06-2007 | Исправлено: sadmn, 17:34 14-06-2007
    newhome

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте.
    Подскажите пожалуйста команду для чтения чисел из файла и вычисления их суммы.
    Есть код:
    ----------------------------
    del sum.txt
    for /F "usebackq tokens=1 delims=" %%i in (`dir /b *.txt`) do (set fname=%%i)
    for /F "usebackq tokens=9,10 delims='ru. " %%i in (`find %fname% "R'"`) do (echo %%i >>sum.txt)
    ----------------------------
    Нужно, чтобы пользователь выбирал из списка файлов в конкретной папке
    любой. Далее этот файл обрабатывается по заданной маске ("tokens=9,10 delims='ru. ")
    и в файл sum.txt записывается следующее:
    10000
    26000
    12344
    ...и.т.д.
    Далее нужно, чтобы указанные числа складывались (их может быть до 10000) и результат выводился на экран.
     
    Долго мучился. Не могу придумать как сделать дальше...
     
     

    Всего записей: 11 | Зарегистр. 14-06-2007 | Отправлено: 17:55 14-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sadmn
    Измени первый и второй for так:

    Код:
     
    ...
    for /f "tokens=1* delims=:. " %%a in ('ipconfig ^| find "IP"') do (
    set "new_address=%%b"
    goto cont2
    )
    :cont2
    ...
     

    только в первом вместо new_address поставь old_address, а вместо :cont2 поставь :cont1  

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:05 14-06-2007 | Исправлено: Elroir, 18:08 14-06-2007
    Maza Faka



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

    Цитата:
    чтения чисел из файла и вычисления их суммы

    Какой формат файла? Приведи пример.
     

    Цитата:
    в файл sum.txt записывается следующее:  
    10000  
    26000  
    12344

    В файле могут быть числа начинающиеся с нуля?
     

    Цитата:
    Далее нужно, чтобы указанные числа складывались

    Числа из одного файла или из всех выбранных?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 18:45 14-06-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 3
    vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru