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

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

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

vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Nagual



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

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<<>>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

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

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    igor_andreev

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

    Цитата:
    переменной !dat! удвоить знак процента

    попробуй set dat=!dat:%%1=%%%%1!

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 16:06 23-10-2008
    patron2d



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
     Помогите с несложным  батником
    надо вытянуть файл  с http распаковать его и залить в базу уже на локальной  машине + какой  нить лог  
    сам файл  name_y-m-d.sql.gz  - вроде dump_2008-10-22.sql.gz
    есть cygwin date  gzip и wget для винды
     
    @echo off
     
    set DATE=%date.exe -I%
    set SERVER=http://localhost/
    set NAME=filename
    set EXT=sql
    set EXTZ=gz
    set DATABASE=data
     
    wget %SERVER%%NAME%_%DATE%.%EXT%.%EXTZ%  && gzip -d %NAME%_%DATE%.%EXT%.%EXTZ% && C:\mysql\bin\mysql.exe -u user -ppass -D %DATABASE% < %NAME%_%DATE%.%EXT%
     
    верно я думаю ? винды под рукой нет проверить  + что и как можно записать в  лог файл  -- хоть пару  строчек  время  и результат  
     
     

    Всего записей: 12 | Зарегистр. 21-03-2007 | Отправлено: 17:03 23-10-2008
    igcirkov

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

    Всего записей: 2 | Зарегистр. 23-10-2008 | Отправлено: 17:14 23-10-2008
    avkorets



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ребят а как правлильно провести деление одной переменной на другую??
    set /a new=%%x/%%y не пашет
    %%x типа 12.3456
    %%y типа 1,10,100,1000
    причем если первое число 0 после деления то его не писать т.е.
    делим на 100 =>.123456
    делим на 1000 =>.0123456
    делим на 10 =>1.23456
    спасибо!

    Всего записей: 81 | Зарегистр. 09-09-2008 | Отправлено: 18:51 23-10-2008 | Исправлено: avkorets, 18:57 23-10-2008
    cluster

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть много-много каталогов. Необходимо взвесить размер каждого из них (подкаталоги не надо) и достаточно будет вывести результаты в лог-файл.
    Total Commander'ом бесполезно, потому что данные сбрасываются при любом изменении размера каталогов во время взвешивания (а такое имеет место быть).
    Помогите решить задачу.

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 23:06 23-10-2008
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    cluster
    нажимаешь Alt+Shift+Enter, после чего выполянешь внутреннюю команду тотала 2036 кнопкой, горячей клавишей, или чем угодно, а вообще, плагинов для этого предостаточно

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 00:30 24-10-2008 | Исправлено: Nagual, 00:31 24-10-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    avkorets
    CMD умеет работать только с целыми числами.
    Используй утилиту CLCC (ссылка в шапке, в "Полезных утилитах")

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    ....
    здесь определяются %%x и %%y
    ...
    ...
    for /f "tokens=1* delims=0 " %%a in ('clcc %%x/%%y') do set "result=%%b"
    echo !result!
    ...
     



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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 03:42 24-10-2008 | Исправлено: Elroir, 17:29 24-10-2008
    cluster

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

    Цитата:
    после чего выполянешь внутреннюю команду тотала 2036 кнопкой

    Ещё раз повторюсь, что в процессе измерения содержимое каталогов меняется (пользователи работают), и результат измеренения сбрасывается!

    Всего записей: 1720 | Зарегистр. 21-11-2003 | Отправлено: 08:56 24-10-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    cluster
    http://gammon.com.au/utilities/treeinfo.htm
    http://technet.microsoft.com/en-us/sysinternals/bb896651.aspx

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 09:59 24-10-2008
    patron2d



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
     Кто знает как в переменную  записать  результат  команды  
    например  для  bash
    a=`date +%Y`
    echo $a  # 2008
     
    как  для  батника такая  конструкция
    ЗЫ сорри если ответ  уже  был в ветке  - я не нашел

    Всего записей: 12 | Зарегистр. 21-03-2007 | Отправлено: 10:44 24-10-2008
    GORA2



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

    Цитата:
    попробуй set dat=!dat:%%1=%%%%1!
    Спасибо, работает и даже без 1.  
    Есть еще одна проблема
    Код:
    for /f "skip=1 tokens=*" %%a in ('type !fname!.reg') do (
      set line=%%a
    ....
     
    В разбираемом рег файле (!fname!.reg) есть строки с системными переменными, например:
    Код:
     
    @="%SystemRoot%\\Media\\Ошибка программы.wav"
    Но в переменной line они уже представлены абсолютными путями C:\WINDOWS\Media\Ошибка программы.wav. Это можно как то побороть?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 11:20 24-10-2008
    01MDM



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

    Код:
     
    for /f "skip=1 tokens=*" %%a in ('type !fname!.reg') do (
      set line=%%a
      set line=!line:\=\\!
      ...
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:42 24-10-2008
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Вы не поняли меня. Двойные слеши я сам потом заменяю на одинарные. Меня волнует именно системные переменные. %SystemRoot% заменилось на C:\WINDOWS, а мне этого не надо!
     PS  
    Немного не правильно указал условия. Переменные раскрываются не в первом цикле (там еще правильная запись), а во втором
    Код:
          for /f "tokens=1* delims==" %%b in ('echo !line!') do (
            set val=%%~b
            set dat=%%~c
     
    Т.е. в !line! еще правильная запись (%SystemRoot%), а вот в !dat! уже раскрытые переменные (C:\WINDOWS). Как этого избежать?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 11:53 24-10-2008 | Исправлено: GORA2, 12:07 24-10-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2
     
    Что-то не получается смоделировать ситуацию, возвращается %SystemRoot%:
     

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
     
    for /f "tokens=*" %%i in (test.txt) do (
        set line=%%i
        for /f "tokens=*" %%i in ("!line!") do (
            set aaa=%%i
        )
    )
     
    echo %aaa%
     

     
    в test.txt только одна строчка %SystemRoot%\\test\\test

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:20 24-10-2008
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    А ни чего, что у Вас в обоих циклах одна и та же переменная используется!?  
    А может у меня на нее так Echo ('echo !line!') действует!?
    Точно!!! Это именно Echo, убрал его и все стало на свои места. Спасибо.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 12:39 24-10-2008 | Исправлено: GORA2, 12:47 24-10-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2
    Дело тут в команде "echo" ('echo !line!').
    Если написать for так, как это сделал 01MDM ( for /f "tokens=*" %%i in ("!line!") do ) - все будет в порядке.
     
    Добавлено:


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 12:44 24-10-2008 | Исправлено: Elroir, 12:46 24-10-2008
    avkorets



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    спасибо.
    ток вот не получается вытащить результат который начинается на ноль так как надо т.е. если получилось 0.123456 тоо нужно вывести .123456

    Всего записей: 81 | Зарегистр. 09-09-2008 | Отправлено: 16:58 24-10-2008
    Elroir



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

    Код:
    for /f "tokens=1* delims=0 " %a in ('clcc 1/2') do echo %b

    Получаю ".5" - без нуля, как и надо.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:31 24-10-2008
    sL4yer



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ помогите. Надо сравнить например размер файла 1.txt с числом 102400, только число должно задаватся в байтах. Тоесть иными словами если файл 1.txt равен 100 кб тогда выходить из програмы.

    Всего записей: 49 | Зарегистр. 22-10-2008 | Отправлено: 23:58 26-10-2008
    Elroir



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

    Код:
     
    for %%a in (1.txt) do if %%~za EQU 102400 goto :EOF
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 00:10 27-10-2008
       

    Страницы: 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-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru