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

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

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

    Код:
     
    @echo off
    for /F "usebackq" %%a in (`dir /a:d /b`) do (
    cd %~dp0%%a
    md %~dp0%%a\SecondOne
    for /F "usebackq" %%b in (`dir %~dp0%%a /a-d /b ^| find "file"`) do (  
    copy /y "%~dp0%%a\%%b" "%~dp0%%a\SecondOne
    )
    )

     
    P.S. Но у г-на Nagual код конечно эстетичней :)
     

    Всего записей: 110 | Зарегистр. 01-03-2004 | Отправлено: 16:22 18-03-2009
    Joo1z



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

    Цитата:
    %temp%\1.txt

    или

    Цитата:
    "c:\1.txt"

    ?

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 17:19 18-03-2009
    whoyou

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

    Цитата:
    Joo1z

    Вообщето  %temp%\1.txt  
    Но пробывал и с  %temp%\1.txt и с c:\1.txt так тоже не хочет, даже если вручную пропишу число, после переименования пусто.

    Всего записей: 23 | Зарегистр. 30-01-2009 | Отправлено: 17:50 18-03-2009
    maxi812

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

    Цитата:
    Комрады, помогите написать батник, который будет выполнять следующее :
    1. Копировать все содержимое папки C:\Net, включая подкаталоги и т.д. (ip 192.168.0.1 источника) на машину в лок.сети с адресом 192.168.0.2 (к примеру) в папку диска D:\Net.
    2. Заменять все существующие файлы.

     
     
    xcopy E:\Ku\Irbis\AU \\192.168.6.164\c\g\Irbis\AU /s /e /y /f /z /i
    xcopy E:\Ku\Irbis\DBF \\192.168.6.164\c\g\Irbis\DBF /s /e /y /f /z /i
    xcopy E:\Ku\Irbis\obor \\192.168.6.164\c\g\Irbis\obor /s /e /y /f /z /i
    xcopy E:\Ku\Irbis\STR \\192.168.6.164\c\g\Irbis\STR /s /e /y /f /z /i
     
     
    Корирует папки и заменяет что в них находиться вместо E:\Ku\Irbis\AU ..и.т.д можно вписать \\192.168.6.155\Ku\Irbis\AU ... и .т.д.

    Всего записей: 15 | Зарегистр. 25-02-2009 | Отправлено: 19:47 18-03-2009
    DamNet

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    DESperado
    Спасибо, завтра опробую. У Назгула тоже есть один маленький и неприятный недостаток, если в папке же существует под папка, то там ещё создаётся одна... тоесть при запуске этого скрипта плодиться ужасная куча лишних пустых файлов...  =(
    Нужно ещё делать проверку... ( в таких тонкостях к сожалению я пока не силён...

    Всего записей: 46 | Зарегистр. 12-08-2003 | Отправлено: 21:53 18-03-2009
    king_stiven

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

    Цитата:
    если в папке же существует под папка, то там ещё создаётся одна... тоесть при запуске этого скрипта плодиться ужасная куча лишних пустых файлов...  =(  

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

    Код:
    FOR /D %%e in ("D:\Papka\*") do (
        FOR /f "tokens=*" %%f in ('dir %%e /b /a:-d ^| find /i "file file"') do (
            md "%%e\SecondOne" > nul
            move "%%e\%%f" "%%e\SecondOne" > nul
        )
    )

     
    2 вар

    Код:
    cd /d D:\Papka
    FOR /f "tokens=*" %%e in ('dir /b /a:d') do (
        FOR /f "tokens=*" %%f in ('dir %%e /b /a:-d ^| find /i "file"') do (
            md "%%e\SecondOne" > nul
            move "%%e\%%f" "%%e\SecondOne" > nul
        )
    )

     
    Добавлено:
    DESperado

    Цитата:
    Но не могу понять почему при выполнеии батник заходит в ветку :WORK  

    Может ErrorLevel лучше проверять сразу после проверяемой команды? Я пользуюсь для своих нужд только:
    if not errorlevel 1 ...
    В команде Goto перед меткой двоеточие не ставится, и это
    Goto :WORK %1
    вызывает вопросы. Читаем внимательно справочку  Goto /? там нет никаких передаваемых параметров.
    попробуй

    Код:
    Ping -n 1 %1 >Nul
    If ErrorLevel 0 (
        echo ErrorLevel - %ErrorLevel%
        Goto WORK
    ) else (
        If ErrorLevel 1 (
            echo ErrorLevel - %ErrorLevel%
            Goto NOT_WORK
        )
    )

    Красивее написать не могу, так как с Ping дела не имею.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 22:15 18-03-2009 | Исправлено: king_stiven, 22:45 18-03-2009
    shabelski89

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

    помогите
     
    сделал  
    ipconfig /all>c:\ipconfig.txt
    route print>c:\route_print.txt
    ping 172.23.167.2>c:\ping.txt
    tracert ya.ru -h 10 >c:\tracert.txt
     
    файлы получаются с кодировкой 866,
     
    @echo off
    CHCP 1251 >Nul & Set z0=Как сюда пихнуть файл?
    echo %z0%>c:\f.txt  
     
    как сделать чтобы текст брался из файла?
     
    заранее благодарен
     
    А ещё лучше чтобы кучи файлов не вышло как вставить команду смены кодировки сразу

    Всего записей: 1 | Зарегистр. 18-03-2009 | Отправлено: 22:51 18-03-2009 | Исправлено: shabelski89, 00:27 19-03-2009
    01MDM



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

    Цитата:
    как сделать чтобы текст брался из файла?

    Слишком широкий вопрос. Можно брать целую строку, элементы строки, из нужной, из первой, последней...
     
    for /?
     
    В личке ответил, здесь на случай если кому-то понадобится (с потерей отступов):

    Код:
     
    @echo off  
    for %%i in ("tracert ya.ru","ping 172.23.167.2","route print","ipconfig /all") do (
        set "exec=%%i" && call:job %%i
    )
    goto:eof
     
    :job
    for %%i in (%~1) do set "file=%%i" && goto:next
     
    :next
    if %file%==ipconfig chcp 1251 1>nul
     
    for /f "tokens=*" %%i in ('%exec%') do set "line=%%i" && call:convert "%%i"  
    goto:eof  
     
    :convert  
    if %1=="" echo.>>%file%.txt && goto:eof  
    chcp 1251 1>nul  
    echo %line:<=^<% 1>>%file%.txt  
    chcp 866 1>nul
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 06:18 19-03-2009
    M0rphey

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребят, помогите, есть задача, но с созданием *bat у меня совсем плохо.  
    задача такова:
     \\сервер1\принтер1
     \\сервер1\принтер2
     \\сервер1\принтер3
    при включении пользователем компа, входа в домен запускался *бат, и удалял с пользовательской машины все сетевые принтеры (не трогая локально установленные).
    затем шла проверка активных сетевых принтеров с сервера, и начиналась на пользовательском компе установка активных сетевых принтеров.
    вообще это реализуемо?
    задача возникла после того как привезли ещё один принтер на фирму, постоянно идёт печать, если основной принтер на ТО, что бы не бегать по всей фирме и не подключать вручную другой сетевой принтер...  
    помогите пожалуйста.
    заранее благодарен! =-)

    Всего записей: 3 | Зарегистр. 16-03-2009 | Отправлено: 09:42 19-03-2009 | Исправлено: M0rphey, 10:02 19-03-2009
    DESperado

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven
    Поправил, выдает ErrorLevel - 1, но все равно не заходит в ветку :NOT_WORK. Полностью код такой:

    Код:
    for /F "eol=;" %%i in (%~dp0list.txt) do call :ping_test %%i
    goto :EOF
     
    :ping_test
      Ping -n 1 %1 >Nul  
      If ErrorLevel 0 (  
        echo ErrorLevel - %ErrorLevel%  
        Goto WORK  
      ) else (  
        If ErrorLevel 1 (  
            echo ErrorLevel - %ErrorLevel%  
            Goto NOT_WORK  
        )  
      )
     
    :WORK
      if %on_off%==Выйти (net send %1 "Выйдите из програмы." )
      if %on_off%==Зайти (net send %1 "Можно работать в программе.")  
    GoTo :EOF  
     
    :NOT_WORK
      Echo Комп не работает  
    GoTo :EOF  
     
    :EOF


    Всего записей: 110 | Зарегистр. 01-03-2004 | Отправлено: 09:59 19-03-2009
    K_AHTOH



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Добрый день уважаемые !!!
    Подскажите пожалуйста как переделать скрипт на работу в FTP сервером?
    Вот этот скрипт который сейчас работает подключением "расшаренных" ресурсов. Как бы его заставить теперь работать с ФТР (т.е. меняется протокол источника) оставив работу самого парсера?  

    Всего записей: 155 | Зарегистр. 20-10-2006 | Отправлено: 11:53 19-03-2009
    spasius



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите скрипт, чтобы пользователь имел выбор, нажимал либо 1, либо 2, либо 3 - и происходили бы определенные запуски приложений.

    Всего записей: 695 | Зарегистр. 16-03-2009 | Отправлено: 12:17 19-03-2009
    Mr_Hat



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

    Код:
    @echo off
    :start
    cls
    echo. 1 Блокнот
    echo. 2 Paint  
    echo. 3 Калькулятор
    echo. Q  Выход  
    echo. Введите номер  
    SET /P settingStart=  
    echo.
    echo.
    if /I %settingStart%==q goto eof
    if %settingStart% LSS 1 goto start
    if %settingStart% GTR 3 goto start
    goto m%settingStart%
    :m1
    start notepad
    goto eof
    :m2
    start mspaint
    goto eof
    :m3
    start calc
     

    Всего записей: 984 | Зарегистр. 04-10-2005 | Отправлено: 12:54 19-03-2009 | Исправлено: Mr_Hat, 13:50 19-03-2009
    K_AHTOH



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

    Код:
    @echo off
    cls
    echo "1.calculator"
    echo "2.notepad"
    echo "3.regedit"
    choice /cYNR “Сделай свой выбор”
    pause
    if errorlevel 3 c:\windows\regedit.exe
    if errorlevel 2 c:\windows\notepad.exe
    if errorlevel 1 c:\windows\calc.exe

     
    Немного ругается но работает

    Всего записей: 155 | Зарегистр. 20-10-2006 | Отправлено: 13:22 19-03-2009
    Mr_Hat



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

    Цитата:
    "choice" не является внутренней или внешней
    командой, исполняемой программой или пакетным файлом.

     
    При использовании твоего варианта,
    какой бы выбор не был сделан запускается редактор реестра.

    Всего записей: 984 | Зарегистр. 04-10-2005 | Отправлено: 13:47 19-03-2009
    K_AHTOH



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Mr_Hat
    Да согласен не проверил как следует... Это ДОСовская программа оказывается

    Всего записей: 155 | Зарегистр. 20-10-2006 | Отправлено: 14:26 19-03-2009
    spasius



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

    Цитата:
    goto m%settingStart%

    Это получается пользователю вводит цифру. Далее m+номер=метка? и по ней переход?

    Всего записей: 695 | Зарегистр. 16-03-2009 | Отправлено: 14:54 19-03-2009
    Mr_Hat



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

    Всего записей: 984 | Зарегистр. 04-10-2005 | Отправлено: 15:22 19-03-2009
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DamNet
    с проверкой на пустые папки и наличие уже проведённой операции
    Код:
    @echo off
    set d=SecondOne
    for /f "delims=" %%a in ('dir/b/s/a:d') do copy "%%a\*" nul>nul 2>&1&&if not exist "%%a\..\%d%" (md "%%a\%d%" 2>nul&move/y "%%a\*" "%%a\%d%\")

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 18:16 19-03-2009
    Zeral

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток господа форумчане.
    У меня  такая проблема, сижу курю мануалы по batch'am уже четвёртый час, и не вижу решения моего случая. А дело такое:
    Сижу в инете через локалку, авторизация для доступа в инет осуществляется с  помощью софтины UTM. Но эта  сволочь в последнее  время завела привычку  произвольно вырубать инет. Решается это либо вручную(мышой клацаем в трее, жмём "Включить интернет"), либо перезапуском сего творения.
    Требуется неким образом мониторить состояние интернета(да хоть путём пингования удалённого какогонить сервера) и при отсутствии коннекта до него грохать процесс, и запускать его снова. Проблема  в том каким способом мониторить это дело  Пытался  как то пинг прикрутить, да с самого начала завис.  Подскажите плиз каким образом  это можно осуществить? Примерчик там.. или может другой какой способ?

    Всего записей: 2 | Зарегистр. 19-12-2007 | Отправлено: 21:43 19-03-2009
       

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