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

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

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

vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:40 25-01-2010 | Исправлено: bomzzz, 13:37 20-08-2010
    anzibal

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Исправил пост
     
    C:\Documents and Settings\Admin>dir /a-d/o-d/tc %systemroot%\Tasks
     Том в устройстве C не имеет метки.
     Серийный номер тома: 3046-D42B
     
     Содержимое папки C:\WINDOWS\Tasks
     
    06.04.2010  22:56               154 5.job
    06.04.2010  22:55               154 4.job
    06.04.2010  22:54               154 3.job
    06.04.2010  22:53               154 2.job
    06.04.2010  22:49               154 1.job
    29.03.2010  21:43                 6 SA.DAT
    29.03.2010  21:31                65 desktop.ini
                   7 файлов            841 байт
                   0 папок  30 737 281 024 байт свободно
     
    C:\Documents and Settings\Admin>

    Всего записей: 9 | Зарегистр. 05-04-2010 | Отправлено: 23:04 06-04-2010 | Исправлено: anzibal, 23:36 06-04-2010
    mugil_cephalus

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

    Цитата:
    Вот сам батник  

    setlocal enabledelayedexpansion - включено?
     
    вот сравни два батника
    setlocal enabledelayedexpansion
    cd ".\z!z"
    echo.hi!hi
    pause
     
    и  
     
    REM setlocal enabledelayedexpansion
    cd ".\z!z"
    echo.hi!hi
    pause

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 23:07 06-04-2010
    gryu



    дикий гусь
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
    Гм. "монопенесуально"....  
    я именно  

    setlocal enabledelayedexpansion / rem setlocal enabledelayedexpansion
    cd ".\z!z"
    echo.hi!hi
    pause  

    проверял.  
     
    Добавлено:
    Если вписать в предидущий батник, то появляется "новая строка ругани"
    А именно  
    Достигнут уровень рекурсии,  максимально  возможный для команды  setlocal

    Всего записей: 13035 | Зарегистр. 15-03-2006 | Отправлено: 23:10 06-04-2010 | Исправлено: gryu, 23:10 06-04-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    anzibal
    вот код настроенный для тебя
    chcp 1251>nul  
    for /f "tokens=1-3* skip=6 delims= " %%a in ('dir /a-d/o-d/tc %systemroot%\Tasks') do set "var=%%~d" &&goto:exit  
    :exit  
    if /i "_%var:~-4%" equ "_.job" del /a: /q "%systemroot%\Tasks\%var%"  
    pause  
     
    в этом коде ничего исправлять не нужно!
     

    Цитата:
    skip получается равен 6.

    верно

    Цитата:
    tokens=1-4* то есть остаток 5 будет занесён в переменную.  
    if /i "_%var:~-5%"  
     

    не верно  
     
    у тебя *.job - это четвертое поле после третьего пробела (delims'a)  
    tokens=1-3* - это просмотр 4-ех лексем, первая=%%a вторая=%%b третья=%%с четвертая (звездочка * ) = %%d - вот: set "var=%%~d"
    "_%var:~-4%" - это от перменной %var% (бывшей 4-ой %%d ) отрезаем 4 последних символа

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 23:25 06-04-2010
    anzibal

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
     
    Все равно понять не могу как он определяет предпоследнее
     
    Возможно так:
    C:\Documents and Settings\Admin>dir /a-d/o-d/tc %systemroot%\Tasks  эта строчка не учитывается
     Том в устройстве C не имеет метки. 1
     Серийный номер тома: 3046-D42B   2
                                                             3
     Содержимое папки C:\WINDOWS\Tasks 4  
                                                                  5
    06.04.2010  22:56               154 5.job   6
    06.04.2010  22:55               154 4.job  и с этой уже работает.
    это число строк как раз и указывается в скипе...насколько я сейчас понимаю.

    Всего записей: 9 | Зарегистр. 05-04-2010 | Отправлено: 23:57 06-04-2010 | Исправлено: anzibal, 00:55 07-04-2010
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gryu
    А батник твой, случайно, не называется "chcp.bat" или "chcp.cmd"?

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 02:45 07-04-2010
    gryu



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

    Всего записей: 13035 | Зарегистр. 15-03-2006 | Отправлено: 11:15 07-04-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gryu наводящий вопрос: ты батник запускаешь из консоли cmd или из ФАРа?

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 11:22 07-04-2010
    gryu



    дикий гусь
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425 кликом мыши или вводом с клавиатуры. ( эксплорере. Не в ФАР или другом альтарнативном менеджере. )
     
     

    Всего записей: 13035 | Зарегистр. 15-03-2006 | Отправлено: 11:34 07-04-2010 | Исправлено: gryu, 11:36 07-04-2010
    ivn1978



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

    Всего записей: 192 | Зарегистр. 25-01-2010 | Отправлено: 11:51 07-04-2010 | Исправлено: ivn1978, 17:23 19-04-2010
    gryu



    дикий гусь
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven, ещё раз спасибо за блок обработки времени..  
    Вот только я не понял как его ограничить.  
    Если весь код батника представляет данный блок, то всё работает,
    но нужно после этого блока ещё команды дописывать и передним тоже нужно, а он каждый раз "сверху вниз" гонит.  
    Как то это через goto делается... не могу сообразить как.  
     
    Мне нужно к примеру
    f %errorlevel% LEQ 5 echo %fgh% created 5 min  >nul | goto:error
    Да и перед этим блоком тоже койчего писать нужно.  
     
     
    Добавлено:
    ivn1978

    Цитата:
    И еще: как устроить проверку "%yesno%", т.е. чтобы при вводе любого символа кроме y и n вызывалась ошибка?

    set /p ts="вам кого? y/n: "
    if not definded ts goto:error
    if %ts%==y goto:yes
    if %ts%==n goto:no
     
    :yes  
    бла -бла -бла
     
    :no
    бла бла бла
     
    :error
    бла бла бла

    Всего записей: 13035 | Зарегистр. 15-03-2006 | Отправлено: 11:53 07-04-2010
    wolf0425



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

    Цитата:
    кликом мыши или вводом с клавиатуры. ( эксплорере.  
    странно это - из эксплорера или cmd у меня запускается нормально. XP SP3

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 11:59 07-04-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    anzibal
    вот я в консоли ввел такие команды  
    F:\>chcp 1251>nul
     
    F:\>echo.hi>"%systemroot%\Tasks\предпо след нее.job"
     
    F:\>echo.hi>%systemroot%\Tasks\latest.job
     
    F:\>dir /a-d/o-d/tc %systemroot%\Tasks
     Том в устройстве F имеет метку win1
     Серийный номер тома: BE1C-92F1
     
     Содержимое папки F:\WINDOWS\Tasks
     
    04/07/2010  11:21 AM                 4 latest.job
    04/07/2010  11:21 AM                 4 предпо след нее.job
    03/09/2010  11:24 AM               274 AdobeARM.job
     

    Цитата:
    Все равно понять не могу как он определяет предпоследнее  

    1) chcp 1251 - это если задание на кириллице
    2) четвертая (у меня - пятая) token field (см. for /? ) в виде * нужна, если есть пробелы в имени задания
    Если последний символ в строке tokens= является
    звездочкой, создается дополнительная переменная,
    значением которой будет весь оставшийся текст в
    строке после обработки последней подстроки.
    3) dir /a-d/o-d/tc  
    /o [[:]порядок_сортировки]  
    Управление порядком сортировки и вывода имен файлов и каталогов командой dir.
    /o-d Сортировка по дате и времени от поздних к ранним  
    /t [[:]поле_времени]  
    Задание поля времени для вывода и сортировки.
    /tc Создание  
    4) skip=6 - "методом тыка" установлено попадание на второе сверху задание (предпоследнее по дате создания)
    5) %var:~-4% (см. set /? ) - это проверка по расширению, что это не файлы SA.DAT и desktop.ini (то есть удаляем из переменной var все, окромя последних 4-ех символов, что и будет в нашем случае - расширением )
        %PATH:~-10% - извлечет последние 10 символов переменной PATH.

    Цитата:
    06.04.2010  22:56               154 5.job   6  
    06.04.2010  22:55               154 4.job  и с этой уже работает.  
    это число строк как раз и указывается в скипе...насколько я сейчас понимаю.

    да

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 12:02 07-04-2010
    gryu



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

    Цитата:
    из эксплорера или cmd у меня запускается нормально.

    А вот ещё такой вопрос.  
    в некоторых случаях ругается chcp - не является командой... что то типа такого.  
    Расширенную командную строку включаю.  

    Всего записей: 13035 | Зарегистр. 15-03-2006 | Отправлено: 12:05 07-04-2010
    king_stiven

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

    Цитата:
    Мне нужно к примеру  
    if %errorlevel% LEQ 5 echo %fgh% created 5 min  >nul | goto:error  

    вот так
    if %errorlevel% LEQ 5 goto:error
     

    Цитата:
    Вот только я не понял как его ограничить.  
    Если весь код батника представляет данный блок, то всё работает,  
    но нужно после этого блока ещё команды дописывать и передним тоже нужно, а он каждый раз "сверху вниз" гонит

    Навпиши в виде задачи, что надо, а не словами и ссылками.

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 12:06 07-04-2010
    ivn1978



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

    Всего записей: 192 | Зарегистр. 25-01-2010 | Отправлено: 12:12 07-04-2010 | Исправлено: ivn1978, 17:23 19-04-2010
    gryu



    дикий гусь
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кстати о решении
    Цитата:
    REG ADD HKCU\Console
    для включения шрифта в консоли.
    На 2000-ке не работает.  
    2000-к не знает команды "reg"

     
     
    Добавлено:
    king_stiven
    Цитата:
    Навпиши в виде задачи, что надо, а не словами и ссылками.

    Пишу.
    В некую папку в хаотичном порядке падают некие файлы. (Факс на модеме)
    Мне нужно организовать копирование этих файлов на сетевой диск.
    На этом сетевом диске есть доступ секретарю, которая сортирует файлы в ручную. Что то удаляет, что то сохраняет.
    а. нужно что бы удалённые ею файлы не восстанавливались.
    б. в случае ошибка записи (малоли что, всё же сетевой ресурс, а не локальный) вывыодилась ошибка/предупреждение.  
    -------------------------------------------------
    В идеале время ошибки запоминалось в переменную и вносилось бы в строку копирования в следующий раз... (это фантазии. я ещё всё не до конца это продумал).
     
    Варианты решения я разные рассматривал.  
    В том числе копирование файлов с последующим переносом их в другую папку(пункт а)

    Всего записей: 13035 | Зарегистр. 15-03-2006 | Отправлено: 12:12 07-04-2010 | Исправлено: gryu, 12:52 07-04-2010
    mugil_cephalus

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

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

    запусти батник в консоли и не вылетит

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 12:21 07-04-2010
    gryu



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

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


    Цитата:
     
    @echo off
    :begin
    set /p ts="пиво будешь? y/n: "
    if not definded ts goto:error
    if %ts%==y goto:yes
    if %ts%==n goto:no  
     
    :yes
    echo ктоб сомневался
    ::::: но потом перенаправление же нужно туда куда нужно в батнике!
    goto:mag  
    pause
     
    :no
    echo Ну и зря
    pause
    exit
     
    :error
    echo а водки всё равно нет!
    pause
    goto:begin
     
    :mag
    echo Бегом в магазин!
    pause
    exit
     

    Всего записей: 13035 | Зарегистр. 15-03-2006 | Отправлено: 12:24 07-04-2010 | Исправлено: gryu, 13:06 07-04-2010
    ivn1978



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

    Всего записей: 192 | Зарегистр. 25-01-2010 | Отправлено: 12:53 07-04-2010 | Исправлено: ivn1978, 17:23 19-04-2010
       

    Страницы: 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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 8
    vu1tur (04-09-2010 17:46): http://forum.ru-board.com/topic.cgi?forum=62&topic=21297


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru