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

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



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

    Цитата:
    Попробуй сначала перейти в корень диска
    Не понял Папка создается и в ней оказывается мой батник (тут я не могу изменить ни чего) Все мои действия я могу выполнять из этого батника только. Как тут быть?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 17:01 08-10-2007
    KapralBel



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

    Код:
    @Echo Off
    Set fld=D:\Test
    RD /q /s %fld%

     
    Запуск D:\Test\DelFld.cmd - ругается, но удаляет

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 17:07 08-10-2007
    01MDM



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

    Код:
     
    @echo off
    start cmd /c cd .. && rd /s /q %%commander_path%%
     

     
    тоже ругается, но удаляет

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:21 08-10-2007
    Dieselman

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите решить две задачки
    1. На диске A надо скрыть файлы созданые после определённой даты,дата задаётся с клавиатуры.
    2.Уничтожить даный каталог,имя которого задаётся как параметр.Допустим сначала кидает в корневой каталог и выбивает список подкаталогов,ввожу с клавиатуры имя каталога со списка и отображает новый список подкаталогов(при этом cls-ило,чтобы не засоряло постоянно экран сдоровенным списком и возможностью вернутся на пункт обратно),а для удаления используется допустим команда %Dirname% del

    Всего записей: 4 | Зарегистр. 08-10-2007 | Отправлено: 20:33 08-10-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Dieselman
    2. Выбери любой файл менеджер - ФАР, Тотал, проводник на худой конец
     
    1. Что ты понимаешь под словом скрыть

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 00:10 09-10-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Так и не удается мне удалить эту злополучную папку. Все по порядку:
    1 Имеется 7z SFX архив который распаковывает свое содержимое в папку %COMMANDER_PATH%
    2 Полный путь к этой папке N:\071004\setup_button\%COMMANDER_PATH%\ (указанный полный путь - частный случай)  
    3 Структура папки:
    %COMMANDER_PATH%
        Utilites
             SFX Tool
             install_button.bat
             nircmdc.exe

    4 После распаковки 7z SFX архива из него происходит запуск следующей строкой RunProgram="hidcon:install_button.bat"
    5 В install_button.bat в конце есть строка
    RD /q /s N:\071004\setup_button\%%COMMANDER_PATH%%
    6 В результате удаляется папка SFX Tool со всем содержимым и файлы на ее уровне т.е install_button.bat и nircmdc.exe, а папка %COMMANDER_PATH% с вложенной в нее папкой Utilites так и не удаляются!!!
     
    Подскажите, где у меня ошибка или как обойти эту проблему?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 10:31 09-10-2007
    Nagual



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

    Код:
    cd "%%commander_path%%\.."
    rd/s/q "%%commander_path%%"

    проверять лень

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 11:58 09-10-2007 | Исправлено: Nagual, 12:05 09-10-2007
    KapralBel



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

    Код:
    @Echo Off
    Set fld=D:\Test\Test\
     
    CD \
    Echo RD /q/s %fld%>dlt.cmd
     
    dlt.cmd
     

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 12:01 09-10-2007
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    Так не проходит. Удаляется только батник.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 12:04 09-10-2007
    KapralBel



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

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 12:09 09-10-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2
    не совсем понятно, ты хочешь просто удалить папку %commander_path%?
    кажется понял, у тебя текущий путь вовсе не %commander_path%
    сделай проверку и увидишь

    Код:
    cd\&rd/s/q "%%commander_path%%\.."

    или

    Код:
    cd\&rd/s/q "%%commander_path%%\..\.."

    опять же проверять лень

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:15 09-10-2007 | Исправлено: Nagual, 12:21 09-10-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Не удаляет другие папки - потому что при выполнении - чего-либо из конкретной папки - Винда блокирует эту папку
    Поэтму я передаю управление батнику лежащему в корне диска, вот он и удаляет нужную папку

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 12:22 09-10-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    мне кажется просто висит в процессах hidcon
    поэтому алго такой:
    для начала убить его
    taskkill /f /im hidcon.exe
    определить точно где же у тебя все таки %commander_path%, думаю с этим повозиться придётся
    перейти в другое место, например cd\
    после убить %commander_path%
    по-моему там еще надо ставить слеш на конце, то есть убивать не %commander_path%, а %commander_path%\
    тестировать лень

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:34 09-10-2007 | Исправлено: Nagual, 12:38 09-10-2007
    GORA2



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

    Цитата:
    А мой вариант - работает

    Работает, да еще как!!! Пока подставлял свои пути, где то малость промахнулся так снесло не только папку %COMMANDER_PATH%, а и все что было рядом с ней. Но вроде все нужное сумел восстановить из других источников.
    Сейчас ваш вариант у меня выглядит так
    Код:
    Set fld=E:\test1\test2\%%COMMANDER_PATH%%\
    CD \
    Echo RD /q/s %fld%>dlt.cmd
    Echo DEL dlt.cmd>>dlt.cmd
    dlt.cmd
    Все работает! Спасибо!
    Теперь буду избавляться от прямых путей и переходить на относительные (надеюсь сам дотяну )
    Nagual

    Цитата:
    отпределить точно где же у тебя все таки %commander_path%
    %commander_path% - Это не переменная, а ИМЯ папки (ну вот имя такое неудачное получается, если ТС не запущен).
    Всем спасибо! Как всегда убеждаюсь в том, что здесь живут грамотные и отзывчивые Люди.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 12:47 09-10-2007
    Dieselman

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И обратно к задачкам
    1. На диске A надо скрыть файлы(ATTRIB +h) созданые после определённой даты(например 01.01.2000),дата задаётся с клавиатуры.
    2.Упрощенный вариант задачи
    Уничтожить даный каталог,имя которого задаётся как параметр.Тоесть я с клавиатуры ввожу название каталога,оно ищет соответствие на всём диске.Если сувщевствует такой каталог оно укзаует полный путь к нему и запрос на удаление,а если нет совпадений то выбивает сообщение о том что такого каталога нет на диске.

    Всего записей: 4 | Зарегистр. 08-10-2007 | Отправлено: 14:38 09-10-2007 | Исправлено: Dieselman, 14:39 09-10-2007
    Elroir



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

    Цитата:
    Уничтожить даный каталог,имя которого задаётся как параметр.Тоесть я с клавиатуры ввожу название каталога,оно ищет соответствие на всём диске.Если сувщевствует такой каталог оно укзаует полный путь к нему и запрос на удаление,а если нет совпадений то выбивает сообщение о том что такого каталога нет на диске.


    Код:
     
    @echo off
    setlocal
    set /p "folder=Enter folder's name - "
    for /f "tokens=*" %%a in ('dir /s /ad /b "%~d0\%folder%" 2^>nul') do call :ask "%%a"
    if not defined found (echo No such folder exists)
    goto :EOF
    :ask
    set "found=yes"
    set /p "answer=Do you want to delete folder %1 (y/n)? "
    if /i "%answer:~0,1%"=="y" (rd /q /s %1)
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 15:27 09-10-2007
    Tipulatoid



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

    Цитата:
    2.Уничтожить даный каталог,имя которого задаётся как параметр.Допустим сначала кидает в корневой каталог и выбивает список подкаталогов,ввожу с клавиатуры имя каталога со списка и отображает новый список подкаталогов(при этом cls-ило,чтобы не засоряло постоянно экран сдоровенным списком и возможностью вернутся на пункт обратно),а для удаления используется допустим команда %Dirname% del

     
    Собственно, Elroir уже ответил, но я приведу и свой вариант:

    Код:
    @echo off
    setlocal enabledelayedexpansion
     
    set start_folder=%CD%
     
    :quest
    cls
    set folder_num=
    echo Список подкаталогов текущего каталога:
    set countdir=0
    for /f "tokens=*" %%a in ('dir /b /a:d /o:n') do (
       set /a countdir+=1
       echo [!countdir!] %%a
    )
     
     
    echo.
    echo Перед Вами список текущих каталогов. Ваши действия?
    echo a № - переход в каталог с указанным номером;
    echo d № - удаление каталога с указанным номером;
    echo u - переход на каталог выше;
    echo x - выход
     
    set /p choice=
     
     
    for /f "tokens=1,2" %%a in ('echo %choice%') do (
       if %%a==a (
          set folder_num=%%b
          goto perehod
       )
       if %%a==d (
          set folder_num=%%b
          goto delete
       )
       if %%a==u goto up
       if %%a==x (goto exit) else (
          echo 
          echo Неверные параметры
          pause
          goto quest
       )
    )
     
    :perehod
     
    if not defined folder_num (
       echo Не указан номер каталога
       pause
       goto quest
    )
     
    set cdir=0
    for /f "tokens=*" %%a in ('dir /b /a:d /o:n') do (
       set /a cdir+=1
       if /i !cdir! equ %folder_num% (
          cd "%%a"
          goto quest
          )
    )
     
    goto quest
     
    :delete
     
    if not defined folder_num (
       echo Не указан номер каталога
       pause
       goto quest
    )
     
    set cdir=0
    for /f "tokens=*" %%a in ('dir /b /a:d /o:n') do (
       set /a cdir+=1
       if /i !cdir! equ %folder_num% (
          rd "%%a" /s  
          goto quest
          )
    )
     
    goto quest
     
    :up
    cd..
    goto quest
     
    :exit
    cd %start_folder%
    goto :eof


    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 16:32 09-10-2007 | Исправлено: Tipulatoid, 06:15 10-10-2007
    Dieselman

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

    Цитата:
     
    Собственно, Elroir уже ответил, но я приведу и свой вариант:  

    Мастер,нет слов!Огромное спасибо
    Не подскажите ещё как добавить :переименование каталога,создание нового,вывод даты и времени создания каталога?

    Всего записей: 4 | Зарегистр. 08-10-2007 | Отправлено: 16:59 09-10-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    Красиво сделано!
    А для того, чтобы не появлялись ненужные смайлики в коде - надо убирать галочку со строчки "Разрешить смайлики" внизу, перед отправкой сообщения (можно нажать "Редактировать" и убрать их).

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 19:04 09-10-2007
    Tipulatoid



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

    Цитата:
    Не подскажите ещё как добавить :переименование каталога,создание нового,вывод даты и времени создания каталога?

    Это уже мини-файловый менеджер получается :-)

    Код:
    @echo off
    setlocal enabledelayedexpansion
     
    set start_folder=%CD%
     
    :quest
    cls
    set folder_num=
    set name=
    set new_name=
    set choice=
    echo Список подкаталогов текущего каталога ^(%CD%^):
    set countdir=0
    for /f "tokens=*" %%a in ('dir /b /a:d /o:n') do (
       set /a countdir+=1
       echo [!countdir!] %%a
    )
     
     
    echo.
    echo Перед Вами список текущих каталогов. Ваши действия?
    echo a № - переход в каталог с указанным номером;
    echo d № - удаление каталога с указанным номером;
    echo r № новое название - переименование каталога с указанным номером;
    echo m название - создание нового каталога;
    echo t № - вывод даты и времени создания каталога с указанным номером;
    echo u - переход на каталог выше;
    echo x - выход
     
    set /p choice=
     
     
    for /f "tokens=1,2*" %%a in ('echo %choice%') do (
       if %%a==a (
          set folder_num=%%b
          goto perehod
       )
     
       if %%a==d (
          set folder_num=%%b
          goto delete
       )
     
       if %%a==r (
          set folder_num=%%b
          set new_name=%%c
          goto rename
       )
     
       if %%a==m goto create
     
       if %%a==t (
          set folder_num=%%b
          goto date
       )
     
       if %%a==u goto up
     
       if %%a==x (goto exit) else (
          echo 
          echo Неверные параметры
          pause
          goto quest
       )
    )
     
    :perehod
     
    if not defined folder_num (
       echo Не указан номер каталога
       pause
       goto quest
    )
     
    set cdir=0
    for /f "tokens=*" %%a in ('dir /b /a:d /o:n') do (
       set /a cdir+=1
       if /i !cdir! equ %folder_num% (
          cd "%%a"
          goto quest
          )
    )
     
    goto quest
     
    :delete
     
    if not defined folder_num (
       echo Не указан номер каталога
       pause
       goto quest
    )
     
    set cdir=0
    for /f "tokens=*" %%a in ('dir /b /a:d /o:n') do (
       set /a cdir+=1
       if /i !cdir! equ %folder_num% (
          rd "%%a" /s
          goto quest
          )
    )
     
    goto quest
     
    :rename
     
    if not defined folder_num (
       echo Не указан номер каталога
       pause
       goto quest
    )
     
    if not defined new_name (
       echo Не указано новое название каталога
       pause
       goto quest
    )
     
    set cdir=0
    for /f "tokens=*" %%a in ('dir /b /a:d /o:n') do (
       set /a cdir+=1
       if /i !cdir! equ %folder_num% (
          move "%%a" "%new_name%"
          goto quest
          )
    )
     
    goto quest
     
    :create
     
    for /f "tokens=1*" %%a in ('echo %choice%') do (
       set name=%%b
    )
     
    if not defined name (
       echo Не указано название нового каталога
       pause
       goto quest
    )
     
    md "%name%"
     
    goto quest
     
    :date
     
    if not defined folder_num (
       echo Не указан номер каталога
       pause
       goto quest
    )
     
    set cdir=0
    for /f "skip=7 tokens=*" %%a in ('dir /a:d /o:n') do (
       set /a cdir+=1
       if /i !cdir! equ %folder_num% (
          echo %%a
          pause
          goto quest
          )
    )
     
    goto quest
     
    :up
    cd..
    goto quest
     
    :exit
    cd %start_folder%
    goto :eof

     
    Elroir
    Спасибо :-)
     
     
    Добавлено:
    Dieselman

    Цитата:
    1. На диске A надо скрыть файлы(ATTRIB +h) созданые после определённой даты(например 01.01.2000),дата задаётся с клавиатуры.

     
    Другая твоя задача идеально решается при помощи утилиты Forfiles Скачай ее и кинь в папку %windir%\system32
     
    Сам батник прост:

    Код:
    @echo off
    set date=%1
    forfiles -pa:\ -s -d+%date% -c"CMD /C attrib +h @FILE"

     
    Батник запускается с параметром - датой. Формат даты ddmmyyyy Например 01012000

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 06:09 10-10-2007 | Исправлено: Tipulatoid, 07:35 10-10-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