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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz
    Это не у меня проблема. И у меня нет таких путей. Цикл спотыкается на обычных файлах с небольшим путём.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:29 19-08-2010 | Исправлено: BVV63, 09:30 19-08-2010
    HA3APET

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Столкнулся с такой проблемой.
    Пытаюсь создать bat для создания определённого задания в системном планировщике Windows.
     
    Пример задания:

    Код:
    schtasks /create /sc hourly /mo 1 /st 00:00:00 /tn "Start" /tr "D:\Total Commander\TOTALCMD.EXE" /ru System

     
    В результате создаётся вот так
     
     
    То есть в Выполнить, путь к файлу не заключён в кавычки, а так как у нас пробел, то естественно задание не выполняется.
    В Win Vista\7 задача решается проста, а именно добавлением в команду доп кавычек:

    Код:
    schtasks /create /sc hourly /mo 1 /st 00:00:00 /tn "Start" /tr "'D:\Total Commander\TOTALCMD.EXE'" /ru System

     
    А как быть в WinХР?

    Всего записей: 314 | Зарегистр. 28-01-2009 | Отправлено: 09:32 19-08-2010
    BVV63



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    HA3APET
    А если вручную подредактировать?

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 09:34 19-08-2010
    HA3APET

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    BVV63
    Вручную всё можно.
    Но нужен батник.
    Перелопатил кучу форумов ответа не нашёл. Может тут есть гуру, которые знают ответ.
     
    Schtasks очень важная утилита для системных администраторов, обслуживания ОС, неужели Microsoft в WinXP не предусмотрела в ней создание задания путь к исполняемому файлу которого содержит пробел. А в последующих ОС исправила.
     
    Добавлено:
    Нашёл выход, но немного не удобно.
    Нужно выполнять батник из папки с исполняемым файлом для нашего задания:

    Цитата:
    schtasks /create /sc hourly /mo 1 /st 00:00:00 /tn "Start" /tr ".\TOTALCMD.EXE" /ru System

    И тогда при его выполнении в планировщике получается полный путь к TOTALCMD.EXE заключённый в кавычки как и надо.

    Всего записей: 314 | Зарегистр. 28-01-2009 | Отправлено: 09:56 19-08-2010 | Исправлено: HA3APET, 10:12 19-08-2010
    igor_andreev

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

    Код:

    ... /tr "\"D:\Total Commander\TOTALCMD.EXE"\" /ru System

     
    И на всякий случай на будущее:
     
    Если нужно запустить программу с пробелами в пути и передать ей какие-то параметры:

    Код:

    ... /tr "\"D:\Total Commander\TOTALCMD.EXE\" /var1 /var2" /ru System

     
    То же самое, но если еще и передаваемый параметр содержит пробелы:

    Код:

    ... /tr "\"D:\Total Commander\TOTALCMD.EXE\" \"one of the arguments\"" /ru System

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 11:11 19-08-2010 | Исправлено: igor_andreev, 11:35 19-08-2010
    smirnvlad

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

    Код:
    schtasks /create /sc hourly /mo 1 /st 00:00:00 /tn "Start" /tr """D:\Total" "Commander\TOTALCMD.EXE""" /ru System  

     
    извиняюсь, перемудрил. см. пост igor_andreev

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 11:12 19-08-2010 | Исправлено: smirnvlad, 11:15 19-08-2010
    HA3APET

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

    Спасибо!
    Подскажите пожалуйста справку где вы это нашли.

    Всего записей: 314 | Зарегистр. 28-01-2009 | Отправлено: 11:28 19-08-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BVV63
    Цитата:
    Что, так и должно быть? Нельзя в For использовать GoTo?
    ага, нельзя.
    если очень хочется - выноси наружу, через call :metka
     
    bomzzz

    Цитата:
    не попадалось еще таких длинных путей чтоб батники не справлялись.
    а какие проблемы создать их для проверки?
    перевод в короткие имена доступен не всегда и их длину превысить в общем-то непринципиально сложнее.
     
    у меня почему-то впечатление, что при длинных путях у BVV63 просто DIR ругнется, xxx is too long

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:48 19-08-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    да там кажется надо просто путь на части разбить. кажется все таки было такое когда кеш мазилы удалял
     
    Добавлено:
    в винде буфер 32 кбайта под анси и 64 кб для юникода, причем можно сжулить и записать анси путь в буфер размером для юникода. а в досе даже не помню сколько максимум
     
    Добавлено:
    а может OutLook-а не помню уже
     
    Добавлено:
    наверно и там и там, специально так делают, чтоб вирусам туда было сложнее забраться. и еще папка со случайным именем, но батник туда в одну строчку забирается, так что зря старались

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 12:14 19-08-2010
    BVV63



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

    Цитата:
    если очень хочется - выноси наружу, через call :metka

    Попробовал:

    Код:
    ChDir .>1.Txt
    SetLocal EnableDelayedExpansion
    For /F "Tokens=* UseBackQ" %%0 In (`Dir "E:\2\*.*" /A-D /B /O:N /S`) Do (
        Set Var=%%~F0
        Set FileName=%%~F0
        Set Count=0
        Call :1
    :0
        Echo .>Nul
        )
    Exit
    :1
    If "!Var!"=="" Echo !Count!>>1.Txt & GoTo :0
    Set Var=!Var:~0,-1!
    Set /A Count+=1
    GoTo :1

    Всё едино ерунда получается. Выводится длина первого файла. Цикл обрывается. Болезненно цикл на метки реагирует. Я поставил перед завершающей скобкой команду, поскольку иначе cmd сразу ругается.

    Всего записей: 3542 | Зарегистр. 17-08-2009 | Отправлено: 13:13 19-08-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    в шапке утилит для винды целый склад. самая лучшая на мой взгляд WBAT она для доса. окна ее для батников приемлимы, создаются легко, мышью управляются и всех видов, весит она всего 15 кб. хотя я смотря автор для винды тоже налепил кое чего.
    http://home.mnet-online.de/horst.muc/main.htm
     
    Добавлено:
    все она может и директории распечатывать и двух оконные менеджеры файлов делать
       
     
    Добавлено:
    шикарное оформление для батника

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:31 19-08-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BVV63
    Цитата:
    Попробовал:  
    не вижу. что у тебя там :0 внутри цикла делает?  
     
    примерно так это пишется:

    Код:
    @echo off
     
    chdir .>1.txt
     
    for /f "tokens=*" %%a in ('dir ".\*" /a-d /b /o:n /s') do call :_count "%%~a"
    exit
     
    :_count
    set count=0
    set var=%~1
    :_loop
    set var=%var:~0,-1%
    set /a count += 1
    if "%var%" neq "" goto :_loop
    1>>1.txt echo.%count%
    exit /b

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 15:00 19-08-2010 | Исправлено: wolf0425, 15:16 19-08-2010
    kurbat



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

    Код:
    @echo off
    cls
    setlocal enabledelayedexpansion
    set num=0
    :loop
    echo y | format A: /q /v:disk!num!
    copy /v F:\stop\*.* A:\
    echo Need format and copy any diskette (Y | N)?
    pause > nul
    set /p answ=
    if /i "%answ%"=="y" goto loop
    echo FINISHED...
    endlocal
     

    Всего записей: 89 | Зарегистр. 01-08-2007 | Отправлено: 16:22 19-08-2010
    bomzzz



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

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 16:47 19-08-2010
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kurbat
    происходит ошибка и выполнение прерывается

    Код:
    echo Need format and copy any diskette (Y ^| N)?

     
     
    Добавлено:
    bomzzz
    может это виртуальный дисковод

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 17:35 19-08-2010
    bomzzz



    Запрет на пост
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну а зачем в виртуальном такое городить
     
    Добавлено:
       
       
     
    Добавлено:
    если учесть что новый двд привод стоит 1000 руп, покупка коробки флоппи дискет предприятие сомнительное. а когда я недавно прочитал в книжке что скорость считывание с дискет 60 кб в сек чета меня уже и интересовать перестало, почему флопик у меня не работает

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 17:40 19-08-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как сделать, чтоб эта команда удаляла знак \   в конце каждой строки?
     
    sed.exe -r "s/\\$//" 4.txt
    удаляет только в последней строке
     
    решил
    sed.exe -r "s/\\$*//" 4.txt
     
    нет не решил, где то ошибка

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 19:05 19-08-2010 | Исправлено: king_stiven, 19:36 19-08-2010
    wolf0425



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

    Цитата:
    Как сделать, чтоб эта команда удаляла знак \   в конце каждой строки?
    sed.exe -r "s/\\$//" 4.txt
    удаляет только в последней строке  
    и так нормально удаляет. GNU sed version 4.2
    у тебя там в файле лишних пробелов/табуляций точно нет после \?
    можно ещё "s/\\$//g" попробовать

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 20:00 19-08-2010 | Исправлено: wolf0425, 20:05 19-08-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    у меня глюки что ли, короче вот так работает
    sed.exe -r "s/\\.$//" 4.txt
    и то, если в конце файла есть пустая строка. Файл обыкновенный текстовой. Скачал 4.2 заработало.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 20:05 19-08-2010 | Исправлено: king_stiven, 20:34 19-08-2010
    wolf0425



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

    Цитата:
    у меня глюки что ли, короче вот так работает
    sed.exe -r "s/\\.$//" 4.txt  
    так должно работать только если после \ идет ещё символ, например пробел (невидимый на экране).
    НО вообще я с некоторых вещей прусь:

    Код:
    @echo off
    (
    echo.123\
    echo.345\
    ) > file
    rem создали файл из двух строк.  
    type file | sed.exe -r "s;\\$;;g"
    rem тут все чисто - \ пропали
    (
    echo.123\
    echo.345\
    type file
    ) | sed.exe -r "s;\\$;;g"
    rem а тут первые 2 строки не почищены, если отправить в файл - там пробелы в конце откуда-то нарисовались.
    rem echo точно без мусора, при замене пайпа на >file2 пробелов нет. барабашки?
     

     

    Цитата:
    и то, если в конце файла есть пустая строка. Файл обыкновенный текстовой.
    ну что ты считаешь пустой строкой в конце файла - мне неведомо, с кем-то тут у меня расхождения в терминологии
    \\$ - это строка заканчивающаяся на \ и EOLN
    последняя строка файла вправе быть и с EOLN и без, в первом случае некоторые тут считают такую строку не последней, видят после неё "пустую"

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 20:39 19-08-2010 | Исправлено: wolf0425, 20:52 19-08-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