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

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

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

evle (19-03-2008 19:44): Лимит страниц.
Задачи на bat-файлах 5
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 101 102 103

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 15:21 11-09-2007 | Исправлено: Elroir, 01:52 26-02-2008
    primet

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

    Цитата:
    Код:
    @echo off  
    for /f "delims=" %%a in ('forfiles/s /d -10') do del/q/f/s %%a

    Подскажите пожалуйста что значит команда forfiles
    у меня при запуске данного батника ругается на нее.

    Всего записей: 15 | Зарегистр. 04-04-2007 | Отправлено: 11:42 29-11-2007
    NIKZZZZ



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

    Цитата:
    спотыкается на первом же спец-символе, например -  
    если ввести <>

    Задача решается либо заменой:

    Код:
    set "temp=%s:<=z%"
    set "temp=%s:>=z%"

     
    Либо так:

    Код:
    @echo off
    set /p s=Enter string :  
    set l=0
    set "temp=%s%"
    :next
    if "%temp%" == "" goto _1
    set /a l+=1
    set "temp=%temp:~0,-1%"
    goto next
    :_1
    echo String Lenght = %l%

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 11:46 29-11-2007
    primet

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

    Цитата:
    Код:
    @echo off  
    for /f "delims=" %%a in ('forfiles/s /d -10') do del/q/f/s %%a

    Подскажите пожалуйста что значит команда forfiles
    у меня при запуске данного батника ругается на нее.

    Всего записей: 15 | Зарегистр. 04-04-2007 | Отправлено: 11:50 29-11-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
     
    Нет, так задача не решается...
    Остается проблема с символом "
     
    Мой последний код - более универсальный...
     
    .

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 12:07 29-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    primet
    http://www.dynawell.com/reskit/microsoft/win2000/forfiles.zip
     
    Добавлено:
    SapSat
    Строку можно "взвесить" с помощью временного файла

    Код:
     
    @echo off
    for /f "tokens=*" %%1 in (1.txt) do (
        echo %%1>1.tmp
        for /f "tokens=*" %%2 in ('dir /b 1.tmp') do (
            set /a len=%%~z2-2
        )
    )
    del 1.tmp
    echo %len%
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:10 29-11-2007 | Исправлено: 01MDM, 13:35 29-11-2007
    primet

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Вери Биг Сенкс!

    Всего записей: 15 | Зарегистр. 04-04-2007 | Отправлено: 14:08 29-11-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM  
     
    Да - спасибо 01MDM - это интересная мысль для получения ДЛИНЫ СТРОКИ или ПЕРЕМЕННОЙ - записать переменную в файл и далее просто замерять размер этого файла в байтах, типа
     
    @echo off
    set /p s=Enter string :  
    echo %s% >f
    for /f %%i in ('dir /b f') do set /a l=%%~zi-3
    del f & echo %l%
     
    Только вопрос - как здесь побороть символ >
    ?
     
    И почему я не могу просто написать  
    for /f %%i in (f) do set /a l=%%~zi-3
     
    ?

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 16:51 29-11-2007
    01MDM



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

    Код:
     
    @echo off
    set /p s="Enter string : "  
    for /f "tokens=*" %%i in ("%s%") do echo %%i>f
    for /f %%i in ('dir /b f') do set /a l=%%~zi-2
    del f & echo %l%  
     

     

    Цитата:
    И почему я не могу просто написать  
    for /f %%i in (f) do set /a l=%%~zi-3  
     

    Потому что тебе нужно не содержание а файла, а его параметры

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:16 29-11-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SapSat
    01MDM
    Почему бы не использовать for без ключа /f?

    Код:
     
    for %%i in (f) do set /a l=%%~zi-3
     



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

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



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

    Код:
     
    set "line=!%"
    echo %line%
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:28 30-11-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Возможно решить?  
     
    Конечно - все решается...
    А что ты хочешь получить на выходе?
    Чтобы выдалось !%
    ?
     
    Тогда пиши просто:
     
    set line=!%%  
    echo %line%  
     
    На выходе:
     
    !%
     
    .

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 09:49 30-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SapSat
    Нет, это не решение. Дана переменная line, равная !%, ну или %!, или "abc !% cba", нужно ее вывести в консоль. Если переменная равна !%%, значит надо показать !%%.  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:28 30-11-2007 | Исправлено: 01MDM, 10:33 30-11-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
     
    Так переменная и есть !%  
     
    Просто для того, чтобы переменная была равна !%
    надо добавить второй знак процента !%%
     
    Если хочешь, чтобы переменная была !%%
    то ее надо задавать как !%%%%
     
    итд.

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 10:42 30-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SapSat
    А если эта переменная берется от куда-либо, т.е она динамическая? Переменная потому так и называется, что ты заранее не знаешь ее значение.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:19 30-11-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Так то-то и оно, что тогда вообще все ОК.
     
    Если "эта переменная берется от куда-либо", то есть когда она равна !%
    и идет откуда-то и куда-то, то она так и идет в виде !%  
    Например - введи здесь !%
     
    @echo off
    set /p s=Enter string :  
    set line=%s%
    ::set line=!%%  
    echo %line%  
    echo %line% >111
     
    и это значение так и будет ходить (и выходить) в том же виде !%
     
    Когда же ты ее значение определяешь через set
    то тогда и надо добавлять второй знак процента.
     
    Еще вопросы?
     

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 12:51 30-11-2007
    01MDM



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

    Цитата:
     
    @echo off
    set /p s=Enter string :  
    set line=%s%
    ::set line=!%%  
    echo %line%
     

     
    Не возвращает !, строку вводил aaa ! bbb %
     
    Возвращает... Консоль была запущена через батник и не вышла из setlocal

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:01 30-11-2007 | Исправлено: 01MDM, 13:08 30-11-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Не возвращает !, строку вводил aaa ! bbb %
     
    А у меня возвращает - и в консоль, и в файл
    aaa ! bbb %
    (все 11 символов)
     
    ....

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 13:07 30-11-2007
    01MDM



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

    Код:
     
    @echo off
    set "s=! aaa % bbb"  
    set line=%s%
    echo %line%
     

     
    Почему через set /p работает, т.е при вводе с клавиатуры, а в других случаях (что важнее) нет.  

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:15 30-11-2007
    SapSat

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

    Ну так я же и говорю - когда ты определяешь значение переменной сам, то пиши:
    set "s=! aaa %% bbb"  
     
    (дублируй знак процента).
     
    Если же это значение ! aaa % bbb формируется где-то динамически, то оно будет гулять в вправильном виде.
     
    .

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 13:34 30-11-2007
    01MDM



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

    Код:
     
    @echo off
    for /f "tokens=*" %%i in (1.txt) do (
        set "line=%%i" && call:parsing
        echo.
    )
    goto:eof
     
    :parsing
    setlocal enabledelayedexpansion
    set count=0
     
    :next
    set /p=!line:~%count%,1!<nul
    set /a count+=1
    ping -n 1 localhost >nul
    if not "!line:~%count%,1!"=="" goto:next
     

    Возник вопрос, как через set /p==<nul вывести знак равенства

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:34 30-11-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 101 102 103

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 4
    evle (19-03-2008 19:44): Лимит страниц.
    Задачи на bat-файлах 5


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru