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

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

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

vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:54 27-04-2007 | Исправлено: Elroir, 03:59 10-09-2007
    Aleksanders



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ! Как сделать скриптик, запускающий программу и передающий ей какие-либо заданные параметры? В UNIX-системах можно повешать chat и запрограммировать его, на какие реплики программы что отвечать, а как сделать подобное в виндах? Есть ли версия chat под винды?

    ----------
    LINUX = Linux Is Not a UniX

    Всего записей: 1428 | Зарегистр. 07-07-2002 | Отправлено: 11:48 07-05-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka, как думаешь - krukoff хотел получить  
    Echo %Time:~0,-3%^>^> File "%%i" was NOT deleted>> "%LogPath%"
    для всех *.tmpl файлов, которые он обрабатывать вообще не хотел?
    imho, надо проверку распространить и на следующую строку
     if "*%%~xi"=="%Ext%" Del "%%i" &^
     
    кстати, и ключик /f в твоем совете - откровенно лишний в контесте того, что
    автор специально писал запись в лог - что удалилось без этого ключика, что нет,
    а ключик /q актуален только при указании неполного имени файла - т.е. со всякими ?*
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:50 07-05-2007 | Исправлено: wolf0425, 14:56 07-05-2007
    Nikiit



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    KapralBel
    wolf0425
    биг сенкс!

    Всего записей: 14 | Зарегистр. 18-11-2005 | Отправлено: 11:52 07-05-2007
    wolf0425



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

    Цитата:
    передающий ей какие-либо заданные параметры?

    передающий параметры куда? на stdin?
    type listfile.txt | yourprogram.exe

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 11:52 07-05-2007
    slayer120



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

    Цитата:
    а чем же плоха или не устраивает Daemon Tools

      Да не плоха, но частенько имеются траблы с использованием DT,
    достаточно посмотреть конфу по клонированию.
      Есть еще хорошая утилитка микрософта , маленькая, 33 кБ работает по крайней мере с исошками точно.

    Всего записей: 303 | Зарегистр. 24-01-2007 | Отправлено: 11:52 07-05-2007
    wolf0425



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

    Цитата:
    достаточно посмотреть конфу по клонированию.  

    так в конфе по клонированию - наверно траблы с эмуляцией разных защит, а не с подключением образов для файлового доступа?
    т.е. то, с чем у демона мелкие траблы -  VCdControlTool вообще не подкключает
     
    slayer120

    Цитата:
    работает по крайней мере с исошками точно.

    во-во, и кроме исошек ожидать чего-то от этой приблуды 2001года - оптимизм. нездоровый.
    А держать для *.iso,*.cue,*.bwt,*.cdi,*.b5t,*.ccd,*.mds,*.nrg отдельные приблуды - imho перебор.
     
    *.iso,*.cue,*.nrg неплохо подключает ImageDrive из комплекта Nero, но ещё как минимум сделанные в Алкоголе образы тоже регулярно хочется монтировать, и желательно - все однообразно. так что ДемонТулз - рулит...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 12:23 07-05-2007
    Maza Faka



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

    Цитата:
    как думаешь - krukoff хотел получить  
    Echo %Time:~0,-3%^>^> File "%%i" was NOT deleted>> "%LogPath%"  
    для всех *.tmpl файлов, которые он обрабатывать вообще не хотел?

     
    А при чём тут *.tmpl файлы? У меня в лог записываются только *.tmp файлы, которые удалось и не удалось удалить!
     
    Del (erase)
    /f  
    Задание удаления файлов с атрибутом «Только чтение».
     
    /q  
    Задание автоматического режима. Не выводится подтверждение на удаление

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 13:02 07-05-2007 | Исправлено: Maza Faka, 13:06 07-05-2007
    slayer120



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

    Цитата:
    так в конфе по клонированию - наверно траблы с эмуляцией разных защит

      да нет траблы при переносе систем на другие матери например - ДТ, и алкаш  
    впридачу у народа случаются траблы да и сам не раз сталкивался, бывало из-за алкаша и операционку переустанавливал. Ну а под монтаж исо в ком строке по мне так и не надо больше ничо , а одной прогой все равно не обойдешься под все увы
     Впрочем на вкус и цвет товарища нет.  

    Всего записей: 303 | Зарегистр. 24-01-2007 | Отправлено: 13:40 07-05-2007
    wolf0425



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

    Цитата:
    одной прогой все равно не обойдешься под все увы
    да в общем-то одного DT на все форматы образов как раз и хватает...
    ну, плюс батник монтажа, конечно  
     
    Maza Faka

    Цитата:
    А при чём тут *.tmpl файлы?  

    ты что, как тот чукча, только писатель, читать что написано и понять - проблемы?
    *.tmpl файлы при том, что они присутствуют в  
    For /R %%i In (*.tmp) Do  echo %%i
    на равных с *.tmp - если, конечно, в настройках операционки кто-то не запретил генерацию коротких имен в момент записи .tmpl файла (чего у krukoff явно не было)
     

    Цитата:
    У меня в лог записываются только *.tmp файлы, которые удалось и не удалось удалить!  
    For /R %%i In (%Ext%) Do (
    If "%Ext%"=="*.tmp" Del "%%i" /f /q
    If Not Exist "%%i" (Echo %Time:~0,-3%^>^> File "%%i" was deleted>> "%LogPath%") Else (Echo %Time:~0,-3%^>^> File "%%i" was NOT deleted>> "%LogPath%")  
     

    ну-ка, поясни - зачем батник удаляет а.tmpl , лежащий в том же каталоге и чем этот батник лучше авторского - который хотя бы а.tmpl с атрибутом RO не удалял
     
    а хэлп про ключи ты мне зря написал  - ты его прочитай для начала сам.  
    а, когда прочитаешь и поймешь что написано, объясни - нафига ты  их (каждый по отдельности) вписал,
    если первый меняет поведение батника и удаляет файлы которые до этого не удалялись (хоть это доказывать не надо?), а второй в данном контексте ни на что не влияет - так как для одного, явно указанного, файла, подтверждение и без него никогда не запрашивается??
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:02 07-05-2007 | Исправлено: wolf0425, 14:21 07-05-2007
    Maza Faka



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

    Цитата:
    ну-ка, поясни - каким конкретно оператором отсечется из лога а.tmpl, который присутствует в каталоге и совершенно очевидно не будет удален DEL, т.е. попадет в ветку else

    Создал в корне диска "C:\" файл "а.tmpl", запустил батник, вот лог
    Подробнее..., найди там "а.tmpl", или запусти батник на своём компе!
    Насчёт ключей, а я знаю, что какому либо пользователю оказывается не нужно удалять tmp файлы имеющие по какой-либо причине атрибут для чтения!

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:16 07-05-2007
    wolf0425



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

    Цитата:
    найди там "а.tmpl", или запусти батник на своём комп

    так откуда мне знать - модет у тебя на компе вообще ни одного *.tmpl нет.
     
    твой батник, доработанный для облегчения проверки
     
    @echo off
    chcp 1251 > nul
     
    del /q *.tmp
    echo.>test1.tmp
    echo.>test2.tmpl
     
    Set LogPath=Log.txt
    Set DelPath=.
    Set Ext=*.tmp
    CD "%DelPath%"
    For /R %%i In (%Ext%) Do (
    If "%Ext%"=="*.tmp" Del "%%i" /f /q
    If Not Exist "%%i" (Echo %Time:~0,-3%^>^> File "%%i" was deleted>> "%LogPath%") Else (Echo %Time:~0,-3%^>^> File "%%i" was NOT deleted>> "%LogPath%")
    )  
    пользователь ведь жаловался что У НЕГО *.tmpl тоже зачем-то удаляются и просил это пофиксить.
    если у тебя  
    echo.>test2.tmpl
    For /R %%i In (*.tmp) Do echo %%i %%~xi
    не дает в лог test2.tmpl - значит у тебя просто в системе короткие имена отключены,
    в отличие от моей и krukoff
     

    Цитата:
    а я знаю, что какому либо пользователю оказывается не нужно удалять

    так если специально написан обработчик того, что делать когда файл не удаляется (и пользователь на эту ветку не жалуется) - то вроде совершенно очевидно, что НЕ ВСЕ файлы пользователь собирается удалять, а только некоторые - которые легко удаляются. да и то оказывается не все.
    а ты вместо чтения чего хотели и фикса проблемы - вписал условие эквивалентное If "2"=="2", кучу не относящихся к делу ключей и доказываешь что так и надо было удалять...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:27 07-05-2007 | Исправлено: wolf0425, 14:43 07-05-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    wolf0425
    Вот блин! Оказывается была запрещена генерация коротких имен! Исправил, рестартнул машину, работает, так, как ты писал! Сорри...
    Так вроде тоже работает:

    Код:
     
    For /R %%i In (%Ext%) Do (
    If "%%~xi"==".tmp" Del "%%i"
    If Not Exist "%%i" (Echo %Time:~0,-3%^>^> File "%%i" was deleted>> "%LogPath%") Else (
    @If "%%~xi"==".tmp" (Echo %Time:~0,-3%^>^> File "%%i" was NOT deleted>> "%LogPath%")
    )
    )
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 14:37 07-05-2007 | Исправлено: Maza Faka, 14:55 07-05-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka ну и ладно. замяли.  
    но если специально определили %ext% - не очень-то красиво потом использовать .tmp для условий, ибо переменная для того и вводится чтоб задавать расширение в одном месте батника.
     
    2 krukoff если за всей дискуссией нить потерял - в итоге For должен быть таким

    Код:
    For /R %%i In (%Ext%) Do (  
    if "*%%~xi"=="%Ext%" Del "%%i" &  If Not Exist "%%i" (Echo %Time:~0,-3%^>^> File "%%i" was deleted>> "%LogPath%") Else (Echo %Time:~0,-3%^>^> File "%%i" was NOT deleted>> "%LogPath%" )
    )

     
    если незалоченные RO *.tmp тоже надо удалять - добавить в Del /f
     
    опс, скобку было потерял...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 14:52 07-05-2007 | Исправлено: wolf0425, 15:20 07-05-2007
    krukoff



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka
     
    *.tmpl  все равно удаляется мне этого не надо. Как сделать, чтобы удалялись лишь те файлы, которые я внесу в "маску" ? В общем, нужно удалять временные файлы по расширениям, которые я задам.
     

    Код:
    @echo off
    chcp 1251 > nul
    setlocal
    Set LogPath=C:\Log.txt
    Set DelPath=C:\
    set "mask=*.tmp *.tm"
    CD "%DelPath%"
    For /R %%i In (%mask%) Do (
    If "%%~xi"=="*.tmp *.tm" Del "%%i"
    If Not Exist "%%i" (Echo %Time:~0,-3%^>^> File "%%i" was deleted>> "%LogPath%") Else (
    @If "%%~xi"=="*.tmp *.tm" (Echo %Time:~0,-3%^>^> File "%%i" was NOT deleted>> "%LogPath%")
    )
    )

     
    Где я "напортачил" ?
     
    P.S.  Спраздником вас!  

    ----------
    Знает сломанный корабль: жизнь - река и надо плыть,
    Буйный ветер рассекать, тихий берег позабыть.
    Обработка видео на компьютере

    Всего записей: 1673 | Зарегистр. 27-10-2004 | Отправлено: 15:07 07-05-2007 | Исправлено: krukoff, 15:37 07-05-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    krukoff что, и строка в мессаге перед последней твоей - не помогла?
    она вроде не привязана к конкретному расширению и удаляет всё как надо - если в "маске" одно расширение и нет паразитных пробелов.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 15:09 07-05-2007 | Исправлено: wolf0425, 15:27 07-05-2007
    igor_andreev

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

    Цитата:
    *.tmpl  все равно удаляется мне этого не надо.

    DIR /B /S *.TMP | FIND /I /V ".TMPL"

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 15:20 07-05-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev хитрый какой.  
    но халява не бывает бесплатной - ведь кроме 1.TMPL.tmp который удалять надо есть ещё 2.tmp.tmp2 - который тоже удалять НЕ надо, а твой вариент не удовлетворяет обоим требованиям

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 15:23 07-05-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Я возможное направление дал, куда смотреть, а не конечное решение
    DIR /B /S *.TMP | FIND /I /V ".TMPL" | FIND /I /V ".tmp.tmp2" ...продолжайте
     

    Всего записей: 1705 | Зарегистр. 08-12-2004 | Отправлено: 15:28 07-05-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    продолжать куда? напроавление то ты дал совершенно тупиковое:
    внести в список ВСЕ возможные расширения будущих файлов, которые при конвертации в 8.3 также дадут .tmp - совершенно нереально, как и разрешить find пропускать строки с этими сочетаниями в середине имени.
     
    как ни крути, а от пофайловой сравнивалки расширений никуда не денешься, а её уже написали до тебя

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 15:34 07-05-2007 | Исправлено: wolf0425, 15:35 07-05-2007
    Maza Faka



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    krukoff
    Специально создал несколько десятков файлов типа: "1r.tmp" "e34.tmpl" "2.tmp.tmp2" в разных каталогах на диске "C:\"
    В итоге вот этот код работает, как надо:

    Код:
     
    @Echo off
    chcp 1251 > nul
    Set LogPath=C:\Log.txt
    Set DelPath=C:\
    Set Ext=*.tmp
    CD "%DelPath%"
    For /R %%i In (%Ext%) Do (
    If "%%~xi"==".tmp" Del "%%i"
    If Not Exist "%%i" (Echo %Time:~0,-3%^>^> File "%%i" was deleted>> "%LogPath%") Else (
    @If "%%~xi"==".tmp" (Echo %Time:~0,-3%^>^> File "%%i" was NOT deleted>> "%LogPath%")
    )
    )
     

    Удаляет все файлы с расширение "tmp", другие не трогает, в лог, тоже ничего лишнего не пишет, только удалённые "*.tmp" и неудалённые "*.tmp", которые использовались системой.

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:37 07-05-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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 3
    vu1tur (11-09-2007 15:22): продолжаем в теме Задачи на bat-файлах 4


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru