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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SapSat
     
    @echo off
    set /p DFar=Enter Fahrenheit's Degree :  
    set /a DCel=( %DFar% - 32 ) * 500 / 9
    Echo %DFar% F = %DCel:~0,-2%.%DCel:~-2% C  (%DCel%)
     
    Проделать set /? и прочитать, перед тем как писать - мог бы и сам.
    А вот быстро определить длину строки - способа нет, в отличие от отсчета символов с конца.
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:50 27-11-2007 | Исправлено: wolf0425, 14:53 27-11-2007
    Elroir



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

    Код:
     
    set "temp=55F"
    set "scale=%temp:~-1%"
     

    В твоем случае - это "echo %td:~-1%"
     

    Цитата:
    этот код правильно работает только для F > 50

    CMD не поддерживает дроби - соответственно, этот код не может правильно работать.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:51 27-11-2007
    wolf0425



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

    Цитата:
    CMD не поддерживает дроби - соответственно, этот код не может правильно работать.
     
    ты код то посмотрел бы сначала. он и считает сразу в сотых, без дробей...
     
    исходный код ещё и при температуре больше 212F врал
     
    мой (см. выше) наверно должен врать при результате в диапазоне +- .09С, чего при целочисленном входном значении фаренгейтов не бывает. (32F=0С обсчитывается нормально)

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:55 27-11-2007 | Исправлено: wolf0425, 15:07 27-11-2007
    Elroir



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

    Цитата:
    ты код то посмотрел бы сначала. он и считает сразу в сотых, без дробей...  

    Действительно - невнимательно смотрел.

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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо всем ответившим.  
    crop справа я давно нашел сам (см мой пример на предыдущей странице).  
     
    Сейчас я уперся в ошибку при вводе значения менее 10С (или 10F)
     
    код:  
     
     
    @echo off
    setlocal ENABLEEXTENSIONS
     
    :START
    set /p td=Enter Temperature :  
    if %td:~-1%==F goto :FAR  
    if %td:~-1%==C goto :CEL  
    echo Correct input format is: 25C or 75F
    goto :START  
     
    :FAR
    set /a DFar=%td:~-3,2%    
    set /a DCel=(%DFar%-32)*500/9
    Echo %DFar% F = %DCel:~0,-2%.%DCel:~-2% C
    goto :EOF  
     
    :CEL
    set /a DCel=%td:~-3,2%
    set /a DFar=%DCel%*900/5+3200
    Echo %DCel% C = %DFar:~0,-2%.%DFar:~-2% F
    goto :EOF
     
     
     
    Кстати - та же ошибка и при вводе значения больше 99С или 99F ...
     
    где ошибка и как ее поправить?
     
    Спасибо.
    .
     
    ВсЁ!!! Всем спасибо - нашел сам!!!
     
    Правильный код:
     
    @echo off  
    setlocal ENABLEEXTENSIONS  
       
    :START  
    set /p td=Enter Temperature :    
    if %td:~-1%==F goto :FAR    
    if %td:~-1%==C goto :CEL    
    if %td:~-1%==E goto :EOF    
    echo Correct input format is: 25C or 75F or E for Exit  
    goto :START    
       
    :FAR  
    set /a DFar=%td:~0,-1%      
    set /a DCel=(%DFar%-32)*500/9  
    Echo %DFar% F = %DCel:~0,-2%.%DCel:~-2% C  
    goto :START    
       
    :CEL  
    set /a DCel=%td:~0,-1%  
    set /a DFar=%DCel%*900/5+3200  
    Echo %DCel% C = %DFar:~0,-2%.%DFar:~-2% F  
    goto :START
     
     
    Добавлено:
    ============================
     
    НОВАЯ ЗАДАЧКА:
     
    в коде:
     
    set /p new=%str:~-2%
     
    как здесь вместо цифры 2 подставить переменную  
    - у меня что-то с ходу не получается...
     
    то есть - почему:
     
    set /a %l=3
    echo %str:~-3%
    echo %str:~-^%l%
     
    первый crop работает, а второй (с переменной) - нет ?
     
    ?

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 15:55 27-11-2007 | Исправлено: SapSat, 18:26 27-11-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SapSat
     
    setlocal enabledelayedexpansion
    set l=2
    set h=245678
    echo !h:~-%l%!>1.txt

    ----------
    Игры зло.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 19:44 27-11-2007
    avovtchak

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Под windows xp используется чековый термопринтер. Причем используется двумя различными программами поочередно. Принтер подключен к COM2. Одна из программ требует установленного драйвера Generic/Text only, а вторая работает непосредственно с портом, и отказывается печатать, если драйвер Generic/Text only установлен.
    Сейчас выхожу из этой ситуации двумя путями:
    когда необходимо пользоваться программой_2, сношу драйвер, тем самым освобождая порт, либо меняю в свойствах принтера порт на какой либо неиспользуемый. Затем, когда необходимо воспользоваться программой_1 произвожу обратные действия.
     
    Как бы это дело автоматизировать при помощи батников?

    Всего записей: 1 | Зарегистр. 28-11-2007 | Отправлено: 03:17 28-11-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven :
     
    приведенный пример:
    setlocal enabledelayedexpansion  
    set l=2  
    set h=245678  
    echo !h:~-%l%!>1.txt
     
    НЕ РАБОТАЕТ!
     
    в 1.txt:
    h:~-2  
     
    ????
     
    Разобрался - все работает, просто пробелы в конце строки.
     
    Спасибо!
    !

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 09:07 28-11-2007 | Исправлено: SapSat, 09:26 28-11-2007
    01MDM



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

    Код:
     
    set ddd=123456
    set ss=2
    echo | echo %%ddd:~-%ss%%%
     

     
    Может есть вариант и получше

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM -
     
    Тоже работает, спасибо!
     
    !
     
    Добавлено:
     
    wolf0425 :
     "А вот быстро определить длину строки - способа нет..."
     
    написал батник для ОПРЕДЕЛЕНИЯ ДЛИНЫ строки или переменной:
     
    @echo off
    setlocal enabledelayedexpansion  
    set /p str=Enter string :  
    set /a l=0    
     
    :START
    set /a %l+=1
    IF %str% NEQ !str:~-%l%! goto:START
    echo String Length = %l%
     
    (не забывайде удалять пробелы в конце строк при копировании кода...
    надо будет, видимо, написать батник, который будет
    во всех батниках в папке удалять пробелы в конце строк...)
     
    !

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 09:28 28-11-2007 | Исправлено: SapSat, 09:59 28-11-2007
    wolf0425



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

    Цитата:
    wolf0425 :
     "А вот быстро определить длину строки - способа нет..."
    написал батник для ОПРЕДЕЛЕНИЯ ДЛИНЫ строки или переменной:  
    ключевое слово было быстро, а строки бывают и длииинные...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:42 28-11-2007 | Исправлено: wolf0425, 11:52 28-11-2007
    SapSat

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кстати - вопрос на засыпку -
     
    почему этот батник по подсчету длины строки:
     - корректно работает только с буквами
     - длину цифровой строки правильно считает только до 10
     - спотыкается на пробелах
     
    ???  

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SapSat
    В общем вопрос со "спецсимволами" конечно интересный и до сих пор не решен

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set "line=qwerty йцукен < >> @ " " %% % ! ? && =="
    set count=0
    :next
    call:print
    set /a count+=1
    if not "!line:~%count%,1!"=="" goto:next
    goto:eof
    :print
    echo "!line:~%count%,1!" %count%
     
    зы. слегка подправил
     

    выводит все знаки, кроме восклицательного знака и удвоенного процента, как их экранировать? Если значения символов присваивать переменной, то к ним добавится знак равенства.

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

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

    01MDM
     
    считает ДЛИНУ СТРОКИ - включая все знаки - и восклицательные, и удвоенные проценты:
     
     
    @echo off
    setlocal enabledelayedexpansion
    set /p s=Enter string :  
    set l=0
    :next
    set /a l+=1
    if "!s:~%l%,1!" NEQ "" goto:next
    echo String Lenght = %l%

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 17:40 28-11-2007
    NIKZZZZ



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

    Цитата:
    считает ДЛИНУ СТРОКИ

    Если строка пустая выдаст 1.
     
    Вариант без  setlocal enabledelayedexpansion  

    Код:
    @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 | Отправлено: 18:33 28-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SapSat
    Считать то он считает (правильно если set /p), но как вывести каждый знак?

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    set "s=qwerty %% % ! << ="  
    set l=0
    :next
     
    echo !s:~%l%,1!
     
    set /a l+=1
    if "!s:~%l%,1!" NEQ "" goto:next
    echo String Lenght = %l%
     

     
    Как решить:

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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
     
    этот код (Вариант без setlocal enabledelayedexpansion ) -  
    спотыкается на первом же спец-символе, например -  
    если ввести <>
    то выдает  
    > was unexpected...
     
    Так что - вариант не проходит.
    Уж лучше так:
     
    @echo off
    setlocal enabledelayedexpansion
    set /p s=Enter string :  
    set l=0
    if "!s!"=="" goto end
    :next
    set /a l+=1
    if "!s:~%l%,1!" NEQ "" goto next
    :end
    echo String Lenght = %l%
     
     
    Этот вариант СЧИТАЕТ длину всего чего угодно - от пустой строки, до длины строки типа:
    ~!@#$%^&*()_+=-б,./?><\|
     
    .
     
    Добавлено:
     
    01MDM

    Цитата:
    Как решить:  

     
    Да, прикольно -
    если я использую код
     
    setlocal enabledelayedexpansion
    set /p line=Enter string :  
    echo !line!
     
    и ввожу два символа !%
    то все работает нормально.
     
    a если захардкодить значение переменной line - типа:
     
    setlocal enabledelayedexpansion
    set /p line=!%  
    echo !line!
     
    то выдает ошибку...

    Всего записей: 32 | Зарегистр. 27-11-2007 | Отправлено: 09:36 29-11-2007 | Исправлено: SapSat, 09:57 29-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SapSat
    Посчитать не трудно, как это сделать корректно? Ты же не будешь постоянно вводить данные через set /p, а по другому возникают ошибки..
     
    SapSat Мне кажется, что это вообще не решаемо.
     

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток.
    Помогите пожалуйста решить проблему.
    Есть каталог с файлами, каждый файл отличается от последующего временем создания ровно на 1 день, и каждый день в папке появляется еще один файл от текущего дня.
    необходимо оставлять файлы только за месяц, а более старые файлы тереть.
    т.е. нужен батник проверяющий время создания файлов и удаляющий файлы если они старше , 30 дней.
    Заранее спасибо.

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



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

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