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

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

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

    Цитата:
    И фигурных скобочек ещё одних (в описании команды) - ой, не хватает.

    да, я как раз про это, опять опечатка
     
    Добавлено:
    dima1978
    http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=1340#11

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 12:29 20-01-2010
    mugil_cephalus

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

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



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

    Цитата:
    Для примера нужно разархивировать файл с паролем, в котором присутствует символ ("):  
    RaR x -ad -pp"Rx0#nwU5cd sample.rar

    Это не проходит УЖЕ в командной строке... %* - не поможет
    Т.е. передаёт правильно (как и другие варианты, к примеру - ^"), но RAR на этом "затыкается"

    Код:
     
    set "ful_par=x -ad -pp^"Rx0#nwU5cd sample.rar"
    echo RaR %ful_par%
    echo %ful_par%
    RaR %ful_par
     

    Всего записей: 426 | Зарегистр. 23-11-2004 | Отправлено: 18:15 20-01-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kirillhome
    я конкретную не смотрел, - просто помню - похожее встречал, - там еще был фокус, просто не пробовал: подойдет ли он в этой конкретной задаче - http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=1340#14

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 19:38 20-01-2010
    Kirillhome



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mugil_cephalus
    Да какая разница, что так:

    Код:
     
    set "ful_par=x -ad -pp^"Rx0#nwU5cd sample.rar"
    echo RaR %ful_par%
    echo %ful_par%
    RaR %ful_par%
     

     
    что так:
    runme.bat x -ad -pp"Rx0#nwU5cd sample.rar
     
    сам runme.bat

    Код:
     
    echo RaR %*
    echo %*
    RaR %*
     

     
    что так (в командной строке):
    c:\>RaR  x -ad -pp"Rx0#nwU5cd sample.rar
     
    Всё едино - Rar - выдаёт ошибку при запуске.
     
    В данном случае надо обращаться на форум к разрботчикам Rar-а, что бы они сказали - можно ли вообще передать в качестве параметра (составной части параметра) кавычку.

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а прога winrar? тогда - http://forum.ru-board.com/forum.cgi?action=filter&forum=5&filterby=topictitle&word=winrar

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не знаю чего так выходит BorlandIMHO
     
    Текущая кодовая страница: 1251
    Системе не удается найти указанный путь.
    Системе не удается найти указанный путь.
    командой, исполняемой программой или пакетным файлом.
    "d" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.
     
    ПРога не пашет (  
    Пробелы удалены.  
     
     
    @echo off
    chcp 1251
     
    set FTPSERVER=***
    set FTPUSER=***
    set FTPPASSWORD=***
    set "FTPFOLDER=/incoming/дальше идёт моя папка"
    set "LOCALFOLDER=c:\Program Files\QIP\Users\"
    1>"%~dp0ftpscript.tmp" (
        echo open %FTPSERVER%
        echo %FTPUSER%
        echo %FTPPASSWORD%
        echo binary
        echo literal pasv
    )
    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

    Всего записей: 17 | Зарегистр. 16-01-2010 | Отправлено: 22:45 20-01-2010 | Исправлено: takt03, 23:46 20-01-2010
    mugil_cephalus

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

    Цитата:
    set "ful_par=x -ad -pp^"Rx0#nwU5cd sample.rar"  

    надо так - set "var=-pp"Rx0#nwU5cd"
    F:\Documents and Settings\admin>set "var=-pp"Rx0#nwU5cd"
     
    F:\Documents and Settings\admin>set var
    var=-pp"Rx0#nwU5cd
     
    F:\Documents and Settings\admin>
     
     
    Добавлено:

    Цитата:
    что так (в командной строке):  
    c:\>RaR  x -ad -pp"Rx0#nwU5cd sample.rar  
     
    Всё едино - Rar - выдаёт ошибку при запуске.  
     
    В данном случае надо обращаться на форум к разрботчикам Rar-а, что бы они сказали - можно ли вообще передать в качестве параметра (составной части параметра) кавычку.

    походу так...
     
    Добавлено:
    Kirillhome
    dima1978
    На что следует обращать внимание при выборе пароля  
     
    используйте пароль со смешанными регистрами букв;  
    используйте пароль с небуквенными символами (цифры, знаки препинания);  
    используйте пароль, который просто запомнить, чтобы его не записывать на бумаге или другом носителе;  
    используйте пароль, который способны набрать быстро, лучше всего даже не глядя на клавиатуру. Это исключит возможность, когда кто-то подсматривает за вами во время набора пароля.  
    Максимальная длина пароля для RAR-архива составляет 127 символов. Пароли, превышающие данный размер автоматически обрезаются до максимально допустимой длины.  
     
    Благодаря поддержке Unicode в WinRAR не существует никаких ограничений на символы в паролях архивов.Вместе с тем, имейте в виду, что не все современные операционные системы поддерживают Unicode..  
    http://www.win-rar.ru/study/part2/password.php
    http://www.win-rar.ru/search/?q=%EF%E0%F0%EE%EB%FC
    http://www.win-rar.ru/support/knowledge/detail.php?ID=1021
     
    Добавлено:
    F:\Program Files\WinRAR\rar.txt:
    -p[x]   Зашифровать файлы, используя строку <x> в качестве пароля
     
                Пароль регистрозависимый (т.е. прописные и строчные буквы
                различаются). Если вы не укажете пароль в командной строке
                (после -p), то RAR запросит ввод пароля, выдав сообщение
                "Введите пароль".
     
                Пример:
     
                rar a -pmyhoney secret1 *.txt
     
                В данном примере все файлы *.txt добавляются в архив и шифруются
                с паролем "myhoney".

    Код:
    "F:\Program Files\WinRAR\rar.exe" a -pmyhoney secret1 *.txt
    "F:\Program Files\WinRAR\rar.exe" a -pmyh"oney secret1 *.txt
    pause

     
    G:\scripts\test>"F:\Program Files\WinRAR\rar.exe" a -pmyhoney secret1 *.txt
     
    RAR 3.20     Авторские права (C) 1993-2003 Евгений Рошал     15 May 2003
    Незарегистрированная копия.      Наберите RAR -? для вывода справки.
     
    Незарегистрированная копия. Пожалуйста, зарегистрируйтесь.
     
    Создание архива secret1.rar
     
    Добавление remlist.txt                                                 OK
    Добавление Текстовый документ.txt                                      OK
    Готово
     
    G:\scripts\test>"F:\Program Files\WinRAR\rar.exe" a -pmyh"oney secret1 *.txt
     
    RAR 3.20     Авторские права (C) 1993-2003 Евгений Рошал     15 May 2003
    Незарегистрированная копия.      Наберите RAR -? для вывода справки.
     
    Использование: RAR <команда> -<ключ 1> -<ключ N> <архив> <файлы...>
                   <@файл-список...> <путь_для_извлечения\>
     
    <Команды>
     
    ничего экранировать не надо, а обращаться в support
    походу gui winrar.exe - поддерживает кавычки в пароле, cli rar.exe - нет

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 23:58 20-01-2010 | Исправлено: mugil_cephalus, 01:10 21-01-2010
    Pacho



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как в батнике проверить, в какой ОС мы работаем: 32 или 64-bit, а также какая локализация ОС?

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

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

    Код:
    @ECHO OFF
    IF NOT "%OS%"=="Windows_NT" GOTO Syntax
    IF "%~1"=="" GOTO Run
     
     
    :Syntax
    ECHO.
    ECHO Win3264.bat,  Version 1.00 for Windows NT 4 and later
    ECHO Check if Windows is a 32 or 64-bits version
    ECHO.
    ECHO Usage:   WIN3264
    ECHO.
    ECHO Returns: The result will be displayed on screen, and a return
    ECHO          code ("errorlevel") of 32 or 64 will be returned
    ECHO.
    ECHO Written by Rob van der Woude
    ECHO http://www.robvanderwoude.com
    ECHO.
    ECHO.
     
     
    :Run
    IF DEFINED ProgramFiles(x86) (
        FOR /F "tokens=1 delims=[" %%A IN ('VER') DO ECHO %%A^(64-bits^)
        EXIT /B 64
    ) ELSE (
        FOR /F "tokens=1 delims=[" %%A IN ('VER') DO ECHO %%A^(32-bits^)
        EXIT /B 32
    )
     

    Всего записей: 182 | Зарегистр. 06-02-2006 | Отправлено: 10:01 21-01-2010
    dima1978



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
     
    Вот так без кавычек проходит без проблем:

    Цитата:
    G:\scripts\test>"F:\Program Files\WinRAR\rar.exe" a -pmyhoney secret1 *.txt

    Как только в пароле появляются кавычки архивация не происходит

    Цитата:
    G:\scripts\test>"F:\Program Files\WinRAR\rar.exe" a -pmyh"oney secret1 *.txt

    Так что вопрос пока остался не ясным

    Всего записей: 3767 | Зарегистр. 06-11-2003 | Отправлено: 10:30 21-01-2010 | Исправлено: dima1978, 10:32 21-01-2010
    Pacho



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

    Цитата:
    Как в батнике запустить программу, чтобы при этом автоматически выдавался запрос на повышение прав? (Windows 7/Vista/2008)

    Консольной команды не нашёл. Но нашёл как реализовать это через JScript:
    Код:
    var objShell = new ActiveXObject('Shell.Application');
    objShell.ShellExecute('Программа.exe', 'параметры', '', 'runas', 1);

    Можно встроить в командный файл. Данный коммандный файл перезапускает сам себя и, если он не был запущен от имени администратора, то выдаётся запрос на повышение прав (Windows Vista\2008\7). В Windows 2000\XP\2003 по идее должен вызывать диалоговое окно "Запуск от имени...":

    Код:
    @set @x=0 /*
    :: Эта строка должна быть первой
     
    :: Для защиты от зацикливания проверяем, чтобы коммандный файл был запущен с параметром "UAC".
    :: Если нет, то передаём управление в JScript, встроенный коммандный файл
    :: (последняя строка), и завершаем текущий коммандный файл
    @if not %1*==UAC* CScript.exe //nologo /e:JScript "%~f0" & exit /b
     
    :: Далее идут команды нашего коммандного файла
    fsutil fsinfo drives
    @pause
     
    :: Это основной текст скрипта JScript
    :: Перезапуск коммандного файла с запросом на повышение прав (с параметром "UAC" для проверки от зацикливания)
    @exit /b */
    (new ActiveXObject('Shell.Application')).ShellExecute(WScript.ScriptFullName, 'UAC', '', 'runas', 1)

    Можно встроить в любой командный файл, который требует выполнения с повышенными правами с включённым User Account Control в Windows Vista\2008\7 или от имени администратора/другого пользователя в Windows 2000\XP\2003.
     
    ЗЫ: Но неудобно, что во вновь запускаемом коммандном файле текущий каталог меняется на C:\Windows\system32 (из-за параметра 'runas').

    ----------
    Нет судьбы, кроме той, которую мы выбираем.

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dima1978
    я считаю, как и Kirillhome (если я ошибочно его понял, он меня поправит) , что дело не в cmd.exe, а в rar.exe - так что нужно обращаться в суппорт

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

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

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 12:53 21-01-2010 | Исправлено: king_stiven, 12:56 21-01-2010
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dima1978
    листинг (запуск в консоли command-line mode файла bat2.bat) :
     
    X:\>bat2.bat quote"quote
     
    X:\>echo %0 - bat2.bat
    %0 - bat2.bat
     
    X:\>echo %1 - quote"quote
    %1 - quote"quote
     
    X:\>pause
    Для продолжения нажмите любую клавишу . . .
     

    Код:
    echo %%0 - %0
    echo %%1 - %1
    pause

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет!
    Простой вопросик. Имеется некий батничек в котором выполняется копирование файлов, диск с которого копируется задается через параметр, что-то типа:
    xcopy %1\*.* c:\temp /S
    Ежели не задать %1, то будет скопирован весь текущий каталог.
    В связи с эти и вопрос, как проверить, что задана буква диска, а если нет, то сказать юзеру "Задай букву диска, скотина!" и прекратить выполнение?
    Thx!

    Всего записей: 1078 | Зарегистр. 07-07-2002 | Отправлено: 13:23 21-01-2010
    dima1978



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mugil_cephalus
     
    А поподробней если можно. Как этот код

    Цитата:
    echo %%0 - %0
    echo %%1 - %1
    pause  

    привязать к архивированию файлов Rar-ом

    Цитата:
    rar a -pmyh"oney secret1 *.txt  

    Всего записей: 3767 | Зарегистр. 06-11-2003 | Отправлено: 13:39 21-01-2010 | Исправлено: dima1978, 14:47 21-01-2010
    rayalex981

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Необходимо создать текстовый файл с текстом внутри:
     
    [General]
    Output=C:\Kassa\log.txt
    Quit=1
    CheckAndRepair=0
     
    Для создания использую команду ECHO:
     
    ECHO [General]>qq.prn
    ECHO Output=C:\Kassa\log.txt>>qq.prn
    ECHO Quit=1>>qq.prn
    ECHO CheckAndRepair=0>>qq.prn
     
    В итоге имею файл с текстом:
     
    [General]
    Output=C:\Kassa\log.txt
    Quit=
     
    Что я делаю не так???
     
    Если написать ECHO Quit=1 >>qq.prn, т.е. с пробелом перед ">", то все работает, но и пробел копируется.
    Если написать ECHO Quit=11>>qq.prn, то опять все работает, но зачем мне две единицы? ))
    А ECHO CheckAndRepair=0>>qq.prn вообще не записывается. Обидно... Чего-то я не знаю... )))

    Всего записей: 3 | Зарегистр. 31-01-2007 | Отправлено: 13:58 21-01-2010 | Исправлено: rayalex981, 14:33 21-01-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AnGo
    Много способов, задай условия. чему должно или что должен содержать %1
     
    например проверить %1 на наличие :\
     

    Код:
    @echo off
    echo %1 | find ":\" || goto rty
    xcopy %1\*.* d:\temp /S
    goto :eof
    :rty
    echo user down!
    pause
    goto :eof
     

    Всего записей: 2232 | Зарегистр. 17-07-2006 | Отправлено: 14:05 21-01-2010 | Исправлено: king_stiven, 14:30 21-01-2010
    mugil_cephalus

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

    Код:
    if /i "_%~1" equ "_" goto:check
    if /i "_%~1" equ "_a" goto:next
    if /i "_%~1" equ "_b" goto:next
    if /i "_%~1" equ "_c" goto:next
    if /i "_%~1" equ "_d" goto:next
    if /i "_%~1" equ "_e" goto:next
    if /i "_%~1" equ "_f" goto:next
    if /i "_%~1" equ "_g" goto:next
    if /i "_%~1" equ "_h" goto:next
    goto:check
     
    :next
    echo %~0
    echo %~1
    pause
    goto:eof
     
    :check
    set /p var=Type disk letter without colon:
    call "%~dpnx0" "%var%"
    goto:eof
     

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 14:25 21-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