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

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

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

vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

vu1tur



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

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

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





    http://forum.ru-board.com/topic.cgi?forum=62&topic=17154

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 23:07 04-11-2008 | Исправлено: vu1tur, 11:38 26-05-2009
    KfarYm

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

    Цитата:
    Я еще не видел деинсталлятора, который убивает ту папку из которой запущен.

    без комментария…

    Всего записей: 34 | Зарегистр. 13-08-2005 | Отправлено: 21:22 08-12-2008
    01MDM



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

    Цитата:
    без комментария…

     
    ??
     
    Открой папку с программой и запусти uninstall.exe (или как там его) - папка останется.

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Приветствую всех скриптмейкеров, скриптовОдов и скриптОлогов =)
    Задача в приведенном ниже скрипте, а вопрос таков: можно ли как-то его оптимизировать? А то он уже за 3Мб перевалил. Суть скрипта, оптимизация настроек Виндовс ХП через реестр, как вы уже догадались.
    Благодарю заранее.

    Код:
    @ECHO off
     
    :START
    ECHO.
    ECHO.
    ECHO ---===******* MENU *******===---
    ECHO 1. Set changes
    ECHO 2. Restore changes
    ECHO 3. EXIT
    Set /p Choise=Make a choise:
     
    SET t000="000 1" "001 1" "002 1"
    SET t001="000 2" "001 2" "002 2"
     
    IF %Choise%==1 (
        FOR %%i IN (%t000%) DO CALL :%%~i
        PAUSE
        CLS
        GOTO :START
        )
     
    IF %Choise%==2 (
        FOR %%i IN (%t001%) DO CALL :%%~i
        PAUSE
        CLS
        GOTO :START
        )
        
    IF %Choise%==3 (GOTO :EXIT) ELSE (CLS&ECHO.&ECHO.&ECHO Wrong choise...&ECHO.&GOTO :START)
     
    :EXIT
    EXIT
     
    :000
    IF %1==1 REG ADD "HKLM\SOFTWARE\.test_000" /v "test_000" /t REG_SZ /d "Changed" /f
    IF %1==2 REG ADD "HKLM\SOFTWARE\.test_000" /v "test_000" /t REG_SZ /d "Restored" /f
    GOTO :EOF
     
    :001
    IF %1==1 REG ADD "HKLM\SOFTWARE\.test_001" /v "test_000" /t REG_SZ /d "Changed" /f
    IF %1==2 REG ADD "HKLM\SOFTWARE\.test_001" /v "test_000" /t REG_SZ /d "Restored" /f
    GOTO :EOF
     
    :002
    IF %1==1 (
        REG ADD "HKLM\SOFTWARE\.test_002" /v "test_000" /t REG_SZ /d "Changed" /f
        REG ADD "HKLM\SOFTWARE\.test_002" /v "test_001" /t REG_SZ /d "Changed" /f
        REG ADD "HKLM\SOFTWARE\.test_002" /v "test_002" /t REG_SZ /d "Changed" /f
            )
    IF %1==2 (
        REG ADD "HKLM\SOFTWARE\.test_002" /v "test_000" /t REG_SZ /d "Restored" /f
        REG ADD "HKLM\SOFTWARE\.test_002" /v "test_001" /t REG_SZ /d "Restored" /f
        REG ADD "HKLM\SOFTWARE\.test_002" /v "test_002" /t REG_SZ /d "Restored" /f
            )
    GOTO :EOF

    Всего записей: 17 | Зарегистр. 29-07-2008 | Отправлено: 10:48 09-12-2008
    AvgustiN



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Здравствуйте! Помогите разобраться с такой вот проблемкой...  
     
    Заранее извиняюсь, если решение данной проблемки уже где-нибудь встречалось.
     
    ОС: WIn XP Pro.
     
    имеется вот такой вот батничек:

    Код:
     
    title Load program... Please wait...
    @echo off
    net use w: \\192.168.x.x\a1 > nul
    echo "1. Disk connected"
    cd d:\
    d:
    md 123
    cd d:\123
    md Program
    copy w:\Dekanat.exe d:\123\Program\Prog.exe > nul
    echo "2. File updated"
    start d:\123\Program\Prog.exe > nul
    echo "3. Run programm"
    net use w: /delete > nul
    echo "4. Disk disconnected"
    exit
     

     
    Немного поясню работу bat-файла:
     
    Имеется exe-файл 'Prog.exe' на сервере '192.168.x.x' в папке 'a1'. Работа bat-файла заключается в том, чтобы скопировать этот файл с сервера в папку пользователя 'd:\123\Program\Prog.exe' на его компе и запустить его.
     
    Требуется модернизировать батничек следующим образом:
     
    если нет связи с сервером, то нужно запустить последнюю удачно скопированную версию файла 'Prog.exe' с компа пользователя, а не с сервера. ну а если есть связь, то скопировать этот файл с сервера и запустить.
     
    Заранее спасибо...

    Всего записей: 84 | Зарегистр. 04-11-2006 | Отправлено: 12:09 09-12-2008 | Исправлено: AvgustiN, 12:28 09-12-2008
    NIKZZZZ



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

    Цитата:
    можно ли как-то его оптимизировать?

    Как я понял, оптимизация должна исключить If'ы.
     

    Код:
    @ECHO off
    cls  
    :START
    ECHO.
    ECHO.
    ECHO ---===******* MENU *******===---
    ECHO 1. Set changes
    ECHO 2. Restore changes
    ECHO 3. EXIT
     
    Set /p Choise=Make a choise:
    IF %Choise%==3 GOTO :Eof
    IF %Choise% GTR 3  (CLS&ECHO.&ECHO.&ECHO Wrong choise...&ECHO.&GOTO :START)
    IF %Choise% LSS 1  (CLS&ECHO.&ECHO.&ECHO Wrong choise...&ECHO.&GOTO :START)
     
    SET t1="000" "001" "002"
    SET t2="003" "004" "005"
     
    Set t=t%Choise%
    setlocal enabledelayedexpansion
    FOR %%i IN (!%t%!) DO CALL :%%~i
    PAUSE
    CLS
    goto :start
     
    :000
    REG ADD "HKLM\SOFTWARE\.test_000" /v "test_000" /t REG_SZ /d "Changed" /f
    GOTO :EOF
     
    :001
    REG ADD "HKLM\SOFTWARE\.test_001" /v "test_000" /t REG_SZ /d "Changed" /f
    GOTO :EOF
     
    :002
    REG ADD "HKLM\SOFTWARE\.test_002" /v "test_000" /t REG_SZ /d "Changed" /f
    REG ADD "HKLM\SOFTWARE\.test_002" /v "test_001" /t REG_SZ /d "Changed" /f
    REG ADD "HKLM\SOFTWARE\.test_002" /v "test_002" /t REG_SZ /d "Changed" /f
    GOTO :EOF
     
    :003
    REG ADD "HKLM\SOFTWARE\.test_000" /v "test_000" /t REG_SZ /d "Restored" /f
    GOTO :EOF
     
    :004
    REG ADD "HKLM\SOFTWARE\.test_001" /v "test_000" /t REG_SZ /d "Restored" /f
    GOTO :EOF
     
    :005
    REG ADD "HKLM\SOFTWARE\.test_002" /v "test_000" /t REG_SZ /d "Restored" /f
    REG ADD "HKLM\SOFTWARE\.test_002" /v "test_001" /t REG_SZ /d "Restored" /f
    REG ADD "HKLM\SOFTWARE\.test_002" /v "test_002" /t REG_SZ /d "Restored" /f
    GOTO :EOF

     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 12:55 09-12-2008 | Исправлено: NIKZZZZ, 13:24 09-12-2008
    Karrakurt

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    2 NIKZZZZ:
    Здорово!
    Правда в оригинале подменю есть, но попробую с вашим вариантом покопаться. Если что, снова приду =)
    Благодарю.

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем.
     
    Вот не могу казалось бы совсем простенькую задачу решить.
    Есть две директории. Нужно из одной перенести файлы в другую, но при обнаружении там файла с совпадающим именем, перенести файл с переименованием.
     
    Подскажите, как такой батник написать.
     
    Заранее спасибо

    Всего записей: 3 | Зарегистр. 01-12-2006 | Отправлено: 15:35 10-12-2008
    GRom V

    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Некоторые компоненты в Vista по умолчанию отключены.
    Подскажите......как батником можно установить компонент в Vista???

    Всего записей: 466 | Зарегистр. 31-10-2006 | Отправлено: 15:49 10-12-2008
    01MDM



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

    Код:
     
    @echo off
    for %%i in (SourceDir\*) do (
       if exist "DestDir\%%~nxi" (
          mv "%%i" "DestDir\~%%~nxi"
       ) else (
          mv "%%i" "DestDir"
       )
    )
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 18:04 10-12-2008 | Исправлено: 01MDM, 18:07 10-12-2008
    Jiry

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
     
    Спасибо, но тут нет проверки, существования файла ~%%~nxi.
    Он тоже может там уже иметься, и в результате будет перезаписан.
    Как бы её сюда добавить?

    Всего записей: 3 | Зарегистр. 01-12-2006 | Отправлено: 19:29 10-12-2008
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    for %%i in ("SourceDir\*") do call:mv "%%~nxi"
    goto:eof
     
    :mv
    set "file=%~1"
     
    :check
    if exist "DestDir\%file%" (set "file=~%file%" && goto:check)
    mv "SourceDir\%~1" "DestDir\%file%"
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 22:07 10-12-2008
    QNDD83

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
     
    Если можно давайте по порядку.
     
    Захожу в рабочий каталог
    cd d:/spb/tmp
     
    Читаю список его подкаталогов на выходе команды dir
    for /f ("tokens=*") %%i in (dir /b) do (
     
       Далее перехожу в i-ый каталог
       cd %%i
     
       Читаю список его подкаталогов на выходе команды dir
       for /f ("tokens=*") %%j in (dir /b /a:d) do (
     
          Проверяю есть ли в текущем каталоге нужный файл и объявляю его переменной
          if exist *.txt set FEL=*.pro ??? вот здесь как ???
       )
    )
     
    И мне понадобиться записать путь к этому файлу в текстовый. Как это сделать с переменной?
     
     
     
    Добавлено:
    king_stiven
    Предыдущее сообщение от perzend, какие то косяки с авторизацией просто. Сорри.

    Всего записей: 1 | Зарегистр. 28-03-2007 | Отправлено: 12:40 11-12-2008
    king_stiven

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

    Код:
    @echo off
    FOR /R "d:/spb/tmp" %%k IN (.) DO (
        if exist "%%k\*.txt" (
            set peremennay=%%k
            call :tyu
        )
    )
    goto :eof
    :tyu
    for /f "tokens=*" %%c in ('dir "%peremennay%" /b /a:d') do goto :yui
    echo %peremennay%>>1.txt
    :yui

    В 1.txt будет список самых глубоких подкаталогов, где лежат *.txt

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 13:41 11-12-2008 | Исправлено: king_stiven, 13:47 11-12-2008
    Jiry

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
     
    Большое спасибо за помощь, такой вариант подходит.

    Всего записей: 3 | Зарегистр. 01-12-2006 | Отправлено: 13:47 11-12-2008
    zzxx1488

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    никак не получается заставить sed работать с wildcard, или же я неправильно делаю
    нужно в файле заменить все строки с base=E:\ на base=C:\  при том, что неизвестно E
    пытаюсь сделать так:
    type 1.txt|sed "s/=*:/=C:/g"
    1.txt:
    base=E:\123\dd1.txt
    base=E:\123\dd2.txt
    base=E:\123\dd3.txt
    base=E:\123\dd4.txt
     
    на выходе имею такое: base=E=С:\123\dd1.txt , а должно быть С:\123\dd1.txt
    sed из набора UnxTools (взял с sourceforge.net/projects/unxutils)

    Всего записей: 62 | Зарегистр. 04-10-2008 | Отправлено: 05:10 12-12-2008
    soulthiefer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите пожалуйста !
    оч нужен батник который бы удалял все файлы с определенным расширением например *.txt в указанной папке и всех ее подпапках !
    нужно чтоб выполнялся автоматически и не требовал никаких подтверждений во время ссвоей работы!
    заранее спасибо!!!

    Всего записей: 40 | Зарегистр. 11-07-2006 | Отправлено: 10:17 12-12-2008
    perzend

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Спасибо! Правда не все пути находит. Я двигался в нужном направлении. Не могу только понять как call работает. Вернее то, что внутри функции.
    Вот эта часть.

    Цитата:
    goto :eof  
    :tyu  
    for /f "tokens=*" %%c in ('dir "%peremennay%" /b /a:d') do goto :yui  
    echo %peremennay%>>1.txt  
    :yui

     
    goto :eof - нужен для того чтобы работал call. так?
     
    а потом совсем неясно.  
    for /f "tokens=*" %%c in ('dir "%peremennay%" /b /a:d') do goto :yui  
    Здесь мы читаем список каталогов в текущем и по кадому пути переходим на метку? Для чего? Как тогда echo %peremennay%>>1.txt выполняется???
     
    Спасибо, что терпите )))

    Всего записей: 7 | Зарегистр. 05-12-2008 | Отправлено: 11:13 12-12-2008
    king_stiven

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

    Цитата:
    Есть каталог  TMP, содержащий n-ое количество подкатологов, которые содержат k-ое количество подкаталогов ну и т.п. )) В них лежат файлы, например, *.txt. Необходимо найти самый глубоко зарытый файл в каждом подкатологе каталога TMP и перейти в каталог его содержащий.

    Если хотите узнать, что делает goto :eof, то в винде есть справка, наберите там goto. Также наберите в комстроке goto /? то же самое и с call. Если никак не разберётесь, ещё раз спросите, расскажу. Также в шапке есть уроки по батфайлам.
    команда
    FOR /R "d:/spb/tmp" %%k IN (.) DO (  
        if exist "%%k\*.txt" (  
            set peremennay=%%k  
            call :tyu  
        )  
    )  
    последовательно перебирает каталоги в корневой папке d:/spb/tmp, выражая их через  переменную %%k. Если в каталоге %%k есть текстовой файл, назначаем %%k как peremennay. Затем идём на метку :tyu. Далее проверяем, есть ли в каталоге %%k он же %peremennay% подкаталоги
    for /f "tokens=*" %%c in ('dir "%peremennay%" /b /a:d') do goto :yui
    если есть, то перебираем далее до самого глубокого каталога. если нет, то вносим в текст %peremennay%
    echo %peremennay%>>1.txt
    Должно работать на 100%
    можно поменять строчку  
    echo %peremennay%>>1.txt на
    echo %peremennay%\>>1.txt  
    А вообще то условия задачи нечёткие. Что есть  самый глубоко зарытый файл в каждом подкатологе каталога? Я понял, что если в подкаталоге d:/spb/tmp/1/ есть текст. файл. но и в каталоге d:/spb/tmp/1/1/2 тоже есть текст файл, а больше подкаталогов нет, то мы вносим в список d:/spb/tmp/1/1/2 а не  d:/spb/tmp/1

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 12:52 12-12-2008
    igor_andreev

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

    Код:

    type 1.txt | sed -r -e "s/=\w{1}:/=C:/g"

     
    Добавлено:
    Или наверное даже правильней [A-Za-z] вместо \w

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 13:26 12-12-2008
    vtornik12

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет !!!    
       
    Нужна помощь,    
       
    мне нужен bat файл в котором б было следующее    
       
    1. Есть папка например c:\InFile куда копируются любого вида файлы    
    2. Мне нужо что если есть какие нибудь файлы то запускалась программа например ноудпад к примеру , программка делает свои дела и закрывается сама,    
    3. после этого снова едет дежурство над папкой    
       
    при этом я могу сформировать какой нибудь файлик типа End.txt    
    по которому батник например определит когда ему снова начать следить за папкой на предмет появления файлов    
       
       
    помогите пожалуйста в написании.... батники ни разу не писал и поэтому прошу помощи
     
    в принцепи нужно лишь как определить если в папе какие файлы...
     
    пробовал по разному if exist c:\InFile\   и ставил *.*, !.!, *.*;*  - не канает видимо

    Всего записей: 4 | Зарегистр. 11-12-2008 | Отправлено: 15:27 12-12-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 100

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 6
    vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru