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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Знак процента в батниках служебный - это ни для кого не секрет. Как выполняется батник?
    Правильно - cmd формирует новую строчку команды, в соответствии с тем, что написано в файле (подставляет переменные и т.д.) и запускает ее. То есть, если в батнике есть строчка set "s=%", cmd берет эту строчку, пытается туда подставить переменную (если переменная в батнике с одним знаком процента, он ожидает что-нибудь вида %1 или %9) - переменной % у нас нет, поэтому формируя строчку на запуск, cmd подставляет вместо знака процента пустое место. Ну и запускается у нас команда set "s=".
     
    SapSat

    Цитата:
    Если же это значение ! aaa % bbb формируется где-то динамически, то оно будет гулять в вправильном виде

    Там свои заморочки - зависит от того, что ты делаешь с содержимым переменной и установлена ли директива отложенного раскрытия переменных.


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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Это все понятно, у меня возник вопрос на предыдущей странице. Все никак не доведу до ума typewriter

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Тебе пойдет такое решение твоего TypeWriter ?
     

    Код:
     
    @echo off
    for /f "tokens=*" %%i in (1.txt) do (
        set "line=%%i" && call:go
        echo.
    )
    goto:eof
     
    :go
    setlocal enabledelayedexpansion
    set count=0
     
    :next
    set /p= !line:~%count%,1!<nul
    set /a count+=1
    ping -n 1 localhost >nul
    if not "!line:~%count%,1!"=="" goto:next
     

     

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



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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Неважно - как, главное, чтобы клиент был доволен...
    У тебя работает?
     
    .

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



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

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:51 30-11-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    Я пока тоже не могу найти другого решения, кроме добавления пробела...

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:22 30-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Лучше забыть. Баловство все это..

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ладно, тогда другой вопрос по твоему TypeWriter
     
    Вставил в начало батника строку
     
    chcp 1251 >nul
     
    Однако при прогоне большого txt в кодировке 1251 -
    TypeWriter долго печатает кряказябры, и только после выхода из батника рефрешит кодировку и текст становится читаемым...
     
    Как зарефрешить консоль сразу после команды chcp 1251 >nul
     
    ?

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



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

    Код:
     
    @echo off
    chcp 1251 >nul
    set /p file="Chооse a file: "
    cls
    for /f "tokens=*" %%i in ('type %file%') do (
        set "line=%%i" && call:parsing
        echo.
    )
    chcp 866 >nul
    goto:eof
     
    :parsing
    setlocal enabledelayedexpansion
    set count=0
     
    :next
    if "!line:~%count%,1!"=="=" set /p= = <nul
    set /p=!line:~%count%,1!<nul 2>nul
    set /a count+=1
    ping -n 1 localhost >nul
    if not "!line:~%count%,1!"=="" goto:next
    goto:eof
     

    Без пробелов так и не обошелся

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:59 30-11-2007 | Исправлено: 01MDM, 21:24 30-11-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
     
    Извини - глаза режет:

    Цитата:
    Choice a file

    Choice - это существительное "выбор". Тут надо "Choose a file" использовать.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 20:05 30-11-2007 | Исправлено: Elroir, 20:06 30-11-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    Исправил, крутилось take а choice. Спасибо за замечание.  

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



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

    Код:
    for /d %%i in ("%%~si") do (  
    set SHORT=%%~si  
    )  
    echo %SHORT%  

    выводит короткий путь + имя самой переменной,  
    интересно, как убрать вывод %~si

    Всего записей: 151 | Зарегистр. 25-10-2006 | Отправлено: 17:55 01-12-2007 | Исправлено: Vladimir312, 17:56 01-12-2007
    Elroir



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

    Цитата:
    выводит короткий путь + имя самой переменной,  
    интересно, как убрать вывод %~si

    Что ты пытаешься сделать? Короткий путь к чему? Что должно быть в переменной?

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:35 01-12-2007
    Vladimir312



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    > Что ты пытаешься сделать?
    > Короткий путь к чему?
    Вывод короткого пути к каталогу (для robocopy /Mx),
    в каталогах, содержащих пробелы и имена каталогов на кириллице.
    Результат: E:\Video\ORIGIN\DVDCOM~1\VIDEO_TS\%~si
    Но в конце строки выдается имя переменной. (как избавиться?)  
     
    > Что должно быть в переменной?
    E:\Video\ORIGIN\DVDCOM~1\VIDEO_TS\

    Всего записей: 151 | Зарегистр. 25-10-2006 | Отправлено: 20:04 01-12-2007
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Vladimir312
    Пусть путь E:\Video\ORIGIN\DVDCOM df\VIDEO_TS\
     
    for /f "tokens=*" %%i in ("E:\Video\ORIGIN\DVDCOM df\VIDEO_TS") do set SHORT=%%~sfi
    echo %SHORT%
     

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 20:57 01-12-2007 | Исправлено: king_stiven, 21:19 01-12-2007
    tommak

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

    Всего записей: 5 | Зарегистр. 04-11-2007 | Отправлено: 11:10 03-12-2007
    01MDM



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

    Код:
     
    @echo off
    for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
    dir /b /s /a:d %%i:\ 2>nul | findstr "%*"
    )
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 11:38 03-12-2007
    xitsa



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Как можно удалить все файлы из каталога и всех подкаталогов, кроме файлов из скрытых каталогов?
    Подробнее:

    Код:
     
    Root\
           Subdir1\
                      H backup\             <-- скрытый
                                   Subdir1\  <-- не скрытый
                                   Subdir2\  <-- не скрытый
                      Subdir1\
                      Subdir2\
           Subdir2\
                      H backup\             <-- скрытый
                                   Subdir1\  <-- не скрытый
                                   Subdir2\  <-- не скрытый
                      Subdir1\
                      Subdir2\
     

    Буква H перед именем каталога показывает, что он имеет атрибут скрытый.
    Нужно удалить все файлы из всех каталогов, кроме файлов из каталогов backup, backup\Subdir1, backup\Subdir2.

    Всего записей: 103 | Зарегистр. 25-04-2006 | Отправлено: 11:50 03-12-2007
    tommak

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ой прошу прощения... Его надо удалить ... МОжно поправить я в пакетных не оч ...

    Всего записей: 5 | Зарегистр. 04-11-2007 | Отправлено: 11:54 03-12-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