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

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

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

vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Nagual



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

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

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

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    Elroir



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

    Цитата:
    Да нормально работает

    OK, тогда делаем так:

    Код:
     
    @echo off
    cd /d "E:\1"
    if not errorlevel 1 (
      for /D %%e in (*) do (
        type name.txt | find "%%~nxe">nul
        if not errorlevel 1 (
          move "%%e" "E:\2\%%~nxe-1"
          echo %%~nxe-1>>name.txt
          set /p=%%~nxe-1<nul>"E:\2\%%~nxe-1\9.txt"
        ) else (
            move "%%e" "E:\2\%%~nxe"
            echo %%~nxe>>name.txt
            set /p=%%~nxe<nul>"E:\2\%%~nxe\9.txt"
          )
      )
    )
     

    Код не проверялся - сейчас нет возможности.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 12:05 28-07-2008
    lamener

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir Огромное спасибо !!
    Я чуть поправил !!!

    Код:
    @echo off  
    cd /d "E:\1"
    if not errorlevel 1 (
    :1
      for /D %%e in (*) do (
        type E:\2\name.txt | find "%%~nxe">nul
        if not errorlevel 1 (
          ren "%%e" "%%~nxe-1"
          goto 1
           ) else (
            move "%%e" "E:\2\%%~nxe"
            echo %%~nxe>>E:\2\name.txt
            set /p=%%~nxe<nul>"E:\2\%%~nxe\9.txt"
          )
      )
    )

     
    Результат имено такой как мне и нужен !!
     
    Я не могу понять вот эта переменная "%%e " в цикле она стандартная ?  
    Вот так цикл я уже не смогу организовать ?
     for /D %%peremennay in (*) do ()
     
    а если к примеру мне нужно пройтись по нескольким подкаталогам ?

    Всего записей: 25 | Зарегистр. 23-07-2008 | Отправлено: 13:19 28-07-2008 | Исправлено: lamener, 13:38 28-07-2008
    Elroir



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

    Цитата:
    Я не могу понять вот эта переменная "%%e " в цикле она стандартная ?

    В цикле, в качестве переменной может быть использована любая английская буква (заглавные и прописные различаются).

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:38 28-07-2008
    lamener

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

    Цитата:
    В цикле, в качестве переменной может быть использована любая английская буква (заглавные и прописные различаются).

     
    т.е может использовать только одна буква "%%r", "%%k"  
    вот так уже нельзя "%%rt" "%%a1" ? правильно я тебя понял ?

    Всего записей: 25 | Зарегистр. 23-07-2008 | Отправлено: 14:00 28-07-2008
    Elroir



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

    Цитата:
    вот так уже нельзя "%%rt" "%%a1" ?

    Именно так - только одна буква

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:00 28-07-2008
    Elroir



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

    Цитата:
    А как можно сделать чтобы при запуске бат файла можно было вписывать дату (например: ВПИШИТЕ ДАТУ: 14.05.08) и он бы копировал файлы даты которую я написал, а сели просто нажимаешь Enter тогда копировались бы файлы текущей даты.

     

    Код:
     
    @echo off
    set "d=%date:~0,2%"
    set "m=%date:~3,2%"
    set "y=%date:~6,4%"
    set /p "given_date=ВПИШИТЕ ДАТУ: "
    if defined given_date (
    set "d=%given_date:~0,2%"
    set "m=%given_date:~3,2%"
    set "y=%given_date:~6,4%"
    )
    xcopy /d:%m%-%d%-%y% \\Post1\c$\CASH\TXT\*.txt C:\Statistic\
     



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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:52 28-07-2008
    VitRom

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые, подскажите, как в FOR /F использовать вывод команды, которая, в свою очередь, лежит в переменной, а путь к ней содержит пробелы, да ещё UNC?
     
    Т.е. примерно так:
    Код:
    SET reg=%~dp0reg.exe
    . . .
    FOR /f "skip=4 tokens=3* delims=<tab>" %%V in ('%reg% query %RegKey% /v Path') do SET AppDir=%%V

    Ни reg="%~dp0reg.exe" ни in ('"%reg%" query (по очереди, разумеется) не срабатывают (ругается не то про "преждевременное появление", не то что-то такое - как всегда, в общем). Хотя в других местах, без такого вложения, всё идёт на ура.
     
    Полный батник такой

    Всего записей: 2967 | Зарегистр. 18-06-2006 | Отправлено: 21:22 28-07-2008 | Исправлено: VitRom, 21:25 28-07-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VitRom
    Везде, где определяешь переменные, делай так:

    Код:
     
    set "var=value with spaces"
     

    Везде, где используешь эти переменные, делай так:

    Код:
     
    "%var%"
     

     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 21:36 28-07-2008
    Svjt



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброе время суток.
     
    Уважаемые джедаи консоли, подскажите, как распаковать из консоли ZIP архив? Проблема в том, что RAR.EXE и 7z.exe не берут его, говорят, не будем мы работать с этой гадостью... А если использовать WINRAR, то он создаёт отдельный процесс, соответственно батник не ждёт, когда закончится распаковка и шурует дальше. Могно выставить чтоб батник ждал определённое время, но архивы бывают разного размера и время могно не угадать...

    Всего записей: 17 | Зарегистр. 03-03-2008 | Отправлено: 09:17 29-07-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Svjt
     
    7zip нормально извлекает: 7z e archiev.zip

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 09:51 29-07-2008
    claus22

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите плиз
    нужно переименовать файлы с новым именем содержащем лишь часть из старого имени
    есть файлы
     
    080722_0124.txt
    080723_0126.txt
    080724_0123.txt
     
    их нужно переименовать в ТХТ0807хх.01
    написал командник  

    Код:
     
    @Echo off
    For %%a In (*.txt) Do Call :_Ren %%a %%~na
    GoTo :EOF
     
    :_Ren
    set OldName = %2
    set NewName = %OldName:~0,6%
    Ren  %1 ТХТ%NewName%.01
     

     
    дык переменная %NewName% не содержит данных, где у меня грабли?
    получаю Ren 080722_0124.txt TXT.01

    Всего записей: 118 | Зарегистр. 21-07-2004 | Отправлено: 13:21 29-07-2008 | Исправлено: claus22, 13:30 29-07-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    claus22
    Убери пробелы до и после "="

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 14:14 29-07-2008
    lamener

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем доброго времени суток !!
    Вопрос можно ли батом узнать размеры видео файла ?
    к примеру некий файл с расширением .wmv у него размеры 640х480
    вывести его размеры в текстовый документ
    Заранее всем спасибо !

    Всего записей: 25 | Зарегистр. 23-07-2008 | Отправлено: 15:00 29-07-2008
    claus22

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    опачки, большое спасибо, я както про синтаксис совершенно не думал
     
    и еще вопрос: а как перевести тоже расширение txt в верхний регистр TXT?

    Всего записей: 118 | Зарегистр. 21-07-2004 | Отправлено: 15:01 29-07-2008 | Исправлено: claus22, 15:35 29-07-2008
    Elroir



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

    Цитата:
    и еще вопрос: а как перевести тоже расширение txt в верхний регистр TXT?

    Не понял вопрос. Что ты хочешь сделать? Приведи пример.
     
    lamener

    Цитата:
    Вопрос можно ли батом узнать размеры видео файла ?

    Стандартными средствами нельзя. Поищи в интернете какую-нибудь консольную утилиту, которая может выдавать информацию о мультимедия-файлах.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:25 29-07-2008
    claus22

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    например беру расширение через %%~xa там выходят прописные буквы txt а мне допустим нужно перевести их в заглавные TXT

    Всего записей: 118 | Зарегистр. 21-07-2004 | Отправлено: 18:17 29-07-2008
    RMR

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Так и должно быть что при call "bat2.cmd" :метка %1 он не переходит к метке в bat2.cmd, а считает её за %1?

    Всего записей: 32 | Зарегистр. 23-11-2006 | Отправлено: 18:47 29-07-2008
    Elroir



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

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:08 29-07-2008
    RMR

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir Спасибо.
    А не подскажете почему start /wait ..\prog.exe работает только если %1 не определено?

    Всего записей: 32 | Зарегистр. 23-11-2006 | Отправлено: 19:18 29-07-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    claus22
    Тогда, можно так - внутри for-а определяем переменную ext:
    set "ext=%%~xa"
    и вызываем вспомогательную функцию convert:
    call :convert
     
    Сама функция convert:

    Код:
     
    :convert
    set "ext=%ext:a=A%"
    set "ext=%ext:b=B%"
    set "ext=%ext:c=C%"
    set "ext=%ext:d=D%"
    set "ext=%ext:e=E%"
    set "ext=%ext:f=F%"
    set "ext=%ext:g=G%"
    set "ext=%ext:h=H%"
    set "ext=%ext:i=I%"
    set "ext=%ext:j=J%"
    set "ext=%ext:k=K%"
    set "ext=%ext:l=L%"
    set "ext=%ext:m=M%"
    set "ext=%ext:n=N%"
    set "ext=%ext:o=O%"
    set "ext=%ext:p=P%"
    set "ext=%ext:q=Q%"
    set "ext=%ext:r=R%"
    set "ext=%ext:s=S%"
    set "ext=%ext:t=T%"
    set "ext=%ext:u=U%"
    set "ext=%ext:v=V%"
    set "ext=%ext:w=W%"
    set "ext=%ext:x=X%"
    set "ext=%ext:y=Y%"
    set "ext=%ext:z=Z%"
     

    После этого, в переменной ext будут все заглавные буквы.
     
     
     
    Добавлено:
    RMR

    Цитата:
    А не подскажете почему start /wait ..\prog.exe работает только если %1 не определено?

    Не подскажу :-).
    Без контекста непонятно.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:18 29-07-2008 | Исправлено: Elroir, 20:02 29-07-2008
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru