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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    rayalex981
    ECHO Quit=^1>> qq.prn

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 14:36 21-01-2010
    mugil_cephalus

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

    Код:
    (ECHO Quit=1)>>qq.prn  
    (ECHO CheckAndRepair=0)>>qq.prn

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 14:37 21-01-2010
    rayalex981

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо огромное! С ECHO Quit=^1>> qq.prn заработало всё!

    Всего записей: 3 | Зарегистр. 31-01-2007 | Отправлено: 14:52 21-01-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    а сели у rayalex981 значение параметра будет >9 ?

    странно, что так экранируется - ECHO Quit=^13>>qq.prn - хотя одним ^ оба символа вместе и потоков всего 9
    так не экранируется - ECHO Quit=^1 3>>qq.prn  - это понятно

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 15:15 21-01-2010 | Исправлено: mugil_cephalus, 15:27 21-01-2010
    Kirillhome



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

    Цитата:
     
    ....  
    А поподробней если можно. Как этот код
    ....
    привязать к архивированию файлов Rar-ом
    ....
     

    Ещё раз - дело не в коде, дело в Rar-е и обработке им ключей командной строки.
    Т.е. Rar (как и WinRar - при указании пароля через ключи) не понимает кавычек в пароле.
    Если служба поддержки Rar-а скажет и покажет - как можно (нужно) использовать кавычку в пароле при запуске Rar-а или WinRar-а из командной строки - здесь помогут (на основании этой информации) написать bat-файл, использующий эту возможность.

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 16:53 21-01-2010
    Pacho



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А как использовать кавычку " в качестве разделителя (delims) для команды FOR?

    Всего записей: 263 | Зарегистр. 02-04-2005 | Отправлено: 19:21 21-01-2010
    BorlandIMHO

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

    Цитата:
    Не знаю чего так выходит

    Я тоже не знаю...
    У меня аплоадит.
    Попутно найден ещё баг (но это уже скорее баг сервера): буква "я" в названии папки удваивается...
    Может, какой баг ОС? Тестировалось на Vista x64...
    P.S. Ещё немного подправил код. Попробуйте так... http://forum.ru-board.com/topic.cgi?forum=62&topic=17154&start=2200#3

    ----------
    http://www.imho.ws

    Всего записей: 2403 | Зарегистр. 12-10-2006 | Отправлено: 19:52 21-01-2010
    Kirillhome



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Pacho
    Из файла - получилось
     
    содержимое файла my_file.txt

    Код:
     
    123"456 789"012
    234"567 890"123
     

     
    Вот - разбор:

    Код:
     
    @echo off
    for /f "tokens=*" %%a in (my_file.txt) Do Call :Prv %%a
    GOTO :EOF
     
    :PRV
    echo 1:%*
    set "my_full=%*"
    set "my_full=%my_full:"= %"
    for /f "tokens=*" %%b in ("%my_full%") Do Call :Prv2 %%b
    goto :EOF
     
     
    :PRV2
    echo 2:%*
    goto :EOF
     

    Т.е. сначала всё читаем, заменяем в строке кавычку на пробел, передаём следующей разборке (если надо, конечно).
     
    Можно схитрить, и менять не на пробел, а, предположим на символ с кодом 255 (FF в 16-ричной системе) - тогда потом, указав его в качестве разделителя -  можем обратиться именно к нужному полю.
    Т.е. входной - тот же, обратимся ко второму полю

    Код:
     
    @echo off
    for /f "tokens=*" %%a in (my_file.txt) Do Call :Prv %%a
    GOTO :EOF
     
    :PRV
    echo 1:%*
    set "my_full=%*"
    set "my_full=%my_full:"=%"
    for /f "tokens=2 delims=" %%b in ("%my_full%") Do Call :Prv2 %%b
    goto :EOF
     
     
    :PRV2
    echo 2:%*
    goto :EOF
     

    Здесь  - символ с кодом FF в 16-ке.
    На выходе в этом случае:
    1:123"456 789"012
    2:456 789
    1:234"567 890"123
    2:567 890
     
     
    Добавлено:
    mugil_cephalus

    Цитата:
    king_stiven
    странно, что так экранируется - ECHO Quit=^13>>qq.prn - хотя одним ^ оба символа вместе и потоков всего 9
    так не экранируется - ECHO Quit=^1 3>>qq.prn  - это понятно

    Экранируется только один символ, идущий за ^
    Поэтому в данном случае ECHO Quit=^13>>qq.prn экранируется не 13, а 1, а уже 3 - идёт как обычный символ.

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 20:38 21-01-2010 | Исправлено: Kirillhome, 20:39 21-01-2010
    Pacho



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kirillhome
    Спасибо!
    Переписал твой пример в таком виде (не люблю метки):

    Код:
    @setlocal enabledelayedexpansion
    @echo off
    for /f "tokens=*" %%a in (my_file.txt) do (
      echo 1:%%a
      set "my_full=%%a"
      set "my_full=!my_full:"=!"
      for /f "tokens=2 delims=" %%b in ("!my_full!") do echo 2:%%b
    )

    На выходе тот же результат.
    Тока не пойму, для чего вот здесь кавычки?
    Код:
    set "my_full=%%a"
    set "my_full=!my_full:"=!"
    Вроде и без них работает.
     
    Добавлено:
    Как записать условие:
    если строка начинается с "подстрока", то выполнить.exe

    Всего записей: 263 | Зарегистр. 02-04-2005 | Отправлено: 22:10 21-01-2010 | Исправлено: Pacho, 22:22 21-01-2010
    Kirillhome



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

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

    Думал, что спасут от спецсимволов.... Но как то не до конца спасают....
     

    Цитата:
    Как записать условие:
    если строка начинается с "подстрока", то выполнить.exe

     
    Об этом говорим?
    Вариант 1
    или вот такой "монстрик"
    Вариант 2

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 23:17 21-01-2010 | Исправлено: Kirillhome, 00:17 22-01-2010
    takt03

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BorlandIMHO
    Баг был у меня в мозгу, после экзаменов ))) Всё работает исправно после небольшой коррекции. Ещё раз Спасибо. Вот Работающий код.
    @echo on
    chcp 1251
    set FTPSERVER=s30.turbobit.ru
    set FTPUSER=takt03@mail.ru
    set FTPPASSWORD=qwer03
    set "FTPFOLDER=/1/"
    set "LOCALFOLDER=c:\Program Files\QIP\Users\"
    1>"%~dp0ftpscript.tmp" (
        echo open %FTPSERVER%
        echo %FTPUSER%
        echo %FTPPASSWORD%
        echo binary
        echo literal pasv
    )
    cd "%Localfolder%"                                // Вот тут я дописал чтобы в смд открывалась папка иначе прога тупит. Иначе //он сканирует весь мой диск Ц причём странно начинает с документ алл сетинг  
    for /f "delims=" %%D in ('dir /a:d /b "%LOCALFOLDER%*"') do call  
     
    :FLDCHK "%%~dpnxD" "/%%~nxD"
    1>>"%~dp0ftpscript.tmp" echo by
    ftp -s:"%~dp0ftpscript.tmp"
    del %~dp0ftpscript.tmp
    goto :EOF
    :FLDCPY
    1>>"%~dp0ftpscript.tmp" (
        echo mkdir "%FTPFOLDER%%~2"
        echo cd "%FTPFOLDER%%~2"
        echo lcd "%~dpnx1"
    )
    for /f "delims=" %%A in ('dir /B /A:-D %1') do 1>>"%
     
    ~dp0ftpscript.tmp" (
        echo put "%%~nxA"
    )
    for /f "delims=" %%B in ('dir /B /A:D %1') do call :FLDCPY "%~1
    \%%~nxB" "%~2/%%~nxB"
    goto :EOF
    :FLDCHK
    pushd "%~1"
    for /f "delims=" %%E in ('dir /a:d /b *') do (
        if "%%~nxE" == "History" (call :FLDCPY "%%~dpnxE" "%~2/%%
     
    ~nxE") else (call :FLDCHK "%%~dpnxE" "%~2/%%~nxE")
    )
    popd
    goto :EOF
    exit
     
     
     
    ЕЩЁ 1 ВОПРОСИК КАК МОЖНО СДЕЛАТЬ ЧТОБЫ БАТ ЗАПУСКАЛСЯ ХОТЯБЫ СВЁРНУТЫМ тоесть "start /min 1.bat " типа такой команды только в пакетном файле.

    Всего записей: 17 | Зарегистр. 16-01-2010 | Отправлено: 01:09 22-01-2010 | Исправлено: takt03, 01:15 22-01-2010
    Kirillhome



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

    Цитата:
    ЕЩЁ 1 ВОПРОСИК КАК МОЖНО СДЕЛАТЬ ЧТОБЫ БАТ ЗАПУСКАЛСЯ ХОТЯБЫ СВЁРНУТЫМ тоесть "start /min 1.bat " типа такой команды только в пакетном файле.

    Так сам же всё и написал :)

    Код:
    start "" /min 1.bat

    Это - содержимое 2.bat
    А твой bat-ник - будет 1.bat
    И всё... (только в твоём я бы поставил EXIT перед (вместо) первым GOTO :EOF - тогда он будет закрывать окно при выходе) (хотя один раз всё равно "моргнёт").
     
    На будущее - обрамляй, пожалуйста, код тегами code - таким образом
    [code]Строка 1
    Строка 2
    Строка 3[/code], а то читать его - ну очень тяжело....
    вот как понять, где здесь заканчиваются параметры call?

    Цитата:
    for /f "delims=" %%D in ('dir /a:d /b "%LOCALFOLDER%*"') do call  
     
    :FLDCHK "%%~dpnxD" "/%%~nxD"
    1>>"%~dp0ftpscript.tmp" echo by
    ftp -s:"%~dp0ftpscript.tmp"
    del %~dp0ftpscript.tmp
    goto :EOF

    Сначала показалось, что две метки :FLDCHK, а call - без параметров :)

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 02:15 22-01-2010 | Исправлено: Kirillhome, 02:31 22-01-2010
    vov4ka



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

    Цитата:
    А зачем? Чем не устраивает "планировщик задач"???

    Слышал,что через него некоторые вирусы скрипты свои запускают,поэтому его опасаюсь.

    Всего записей: 110 | Зарегистр. 29-01-2009 | Отправлено: 06:08 22-01-2010
    Nuke142



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    А как удалить всю папку (не оставить пустой, а именно удалить), в который находится сам батник, вместе с файлами, подпапками и самим батником ?
    При чем, название папки может быть случайным.

    Всего записей: 302 | Зарегистр. 03-04-2008 | Отправлено: 12:28 22-01-2010 | Исправлено: Nuke142, 12:29 22-01-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nuke142
    На вирус смахивает. Сначала перейди в родительскую папку
    cd /?
    , потом удали

    Цитата:
    · Переменная %0  

    rd /?

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 13:39 22-01-2010
    Kirillhome



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

    Код:
     
    @echo off
    set my_path=%~dp0
    set my_disk=%my_path:~0,3%
    set tmp_disk=%TEMP:~0,2%
    if /I "%my_path%"=="%my_disk%" (
       echo Not for root on disk
       GOTO :EOF
       ) ELSE (
       %tmp_disk%
       cd "%TEMP%"
       rd /s /q "%my_path%"
       GOTO :EOF
       )  
     

     
    ОЧЕНЬ ВНИМАТЕЛЬНО с запуском. Если положить bat-ник не в ту папку - он удалит всё что сможет в этой папке!!!!

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 14:08 22-01-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вопрос: как в sed к 10 й строке приписать 32 строку? В строках полно кракозябров.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 14:53 22-01-2010
    Pacho



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

    Всего записей: 263 | Зарегистр. 02-04-2005 | Отправлено: 18:33 22-01-2010 | Исправлено: Pacho, 18:43 22-01-2010
    Kirillhome



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

    Код:
     
    for /f "tokens=*" %%a in ('CD') Do echo %%a
     

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 21:01 22-01-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pacho
    for /f "tokens=*" %%a in ("%CD%") Do set "VAR=%%a"

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 21:09 22-01-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru