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

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

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

vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 104 105 106 107 108

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:53 09-01-2011 | Исправлено: mazafakermazafaka, 11:22 04-06-2011
    01MDM



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

    Цитата:
    или тут уже psexec юзать надо?

    Да, sc управляет сервисами. Возможен вариант с wmic, как-то так:

    Код:
     
    WMIC /node:"IP or CompName" /user:"username" /password:"password" process call create notepad.exe
     



    ----------
    Вопросы в личке останутся без ответа

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 17:41 26-01-2011
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Благодарю, пойду разбираться.

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 21:10 26-01-2011
    Free_Soft



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

    Код:
    :rgs
    for %%a in (%DNSlist%) do set DNSadress=%%a&& call:sub
    goto:b
    :sub
    for /f %%a in ('cscript //nologo DNSreg.vbs %DNSadress%') do set DNSr=%%a
    if /i "%DNSr%" == "0" echo KMS emulator succssefully registered at address %DNSadress%. & goto:b
    if /i "%DNSr%" == "1" echo Insufficient access rights for DNS server. Adress: %DNSadress%
    if /i "%DNSr%" == "2" echo <_vlmcs._tcp> record for this computer already registered.
    if /i "%DNSr%" == "3" echo Cannot register A record for host in DNS. Adress: %DNSadress%.
    goto:eof
    :b
    echo All is Ok.
    exit /b

    переписать без call:sub, а с помощью скобок, например

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 09:49 27-01-2011
    wolf0425



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

    Код:
    @echo off
    :rgs
    for %%i in (%DNSlist%) do for /f %%a in ('cscript //nologo DNSreg.vbs %%i') do (
        if /i "%%a" == "0" echo KMS emulator succssefully registered at address %%i.
        if /i "%%a" == "1" echo Insufficient access rights for DNS server. Adress: %%i
        if /i "%%a" == "2" echo ^<_vlmcs._tcp^> record for this computer already registered.
        if /i "%%a" == "3" echo Cannot register A record for host in DNS. Adress: %%i.
    )
    echo All is Ok.
    exit /b  
    чего там в оригинале с _vlmcs._tcp было - след от кривой перекодировки 1251-оем?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 10:46 27-01-2011 | Исправлено: wolf0425, 10:46 27-01-2011
    Free_Soft



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

    Цитата:
    с _vlmcs._tcp было - след от кривой перекодировки 1251-оем

    нет, все ок, это запись в DNS сервер

    Всего записей: 1536 | Зарегистр. 19-04-2010 | Отправлено: 10:49 27-01-2011
    NeoNemesis



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Такой вопрос: нужен командный файл, выполняющий поиск в каталоге и его подкаталогах, указанном первым параметром, файлов наибольшего и наименьшего размеров. Вывести имена файлов, их размеры и даты создания.
     
    Вообще, код у меня уже есть:
     
    @setlocal enabledelayedexpansion
    @ECHO OFF
    CLS
    SET /a m=0
    Set Name1=file
    for /R %1 %%i IN (*.*) DO (IF %%~Zi GTR !m! (SET /a !m=%%~Zi
    SET Name1=%%~NZTi))
    Set Name2=file
    SET /a n=!m!
    for /R %1 %%i IN (*.*) DO (IF %%~Zi LSS !n! (SET /a !n=%%~Zi
    SET Name2=%%~NZTi))
    echo В каталоге %1 наибольший файл !Name1! !m! byte
    echo В каталоге %1 наименьший файл !Name2! !n! byte
    @endlocal enabledelayedexpansion
    pause
     
     
    но какой-то он уж больно громоздкий. Есть способ реализовать поставленную задачу более компактным батником?

    Всего записей: 4 | Зарегистр. 21-01-2011 | Отправлено: 11:34 27-01-2011 | Исправлено: NeoNemesis, 11:36 27-01-2011
    Symrak



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята помогите!!!! Есть скрипт сортировки файлов по папкам согласно списку:  
     

    Код:
     
     
    @Echo Off
    SetLocal EnableDelayedExpansion
    Set Source=%CD%\
    Set Output=%CD%
    Set UsersLog=%CD%\_List.txt
     
    For /F "UseBackQ Tokens=*" %%A In ("%UsersLog%") Do (
        Echo %%A|FindStr :>nul&&(Set OutputDir=%%A&MD "%Output%\!OutputDir:~0,-1!" 2>nul)||Move /Y "%Source%\%%A.*" "%Output%\!OutputDir:~0,-1!" 1>nul
    )
    EndLocal
     
     

     
    Файл _List.txt имеет вид
     

    Код:
     
    Папка1:
    Файл 1
    Файл 2
    Файл 3
     
    Папка2:
    Файл 4
    Файл 5
    Файл 6
     
     

     
    Работает нормально кроме случаев когда в имени файла есть восклицательный знак. Тогда выдаеться ошибка что системе не удаеться найти указаный путь. Как сделать так чтобы файлы с восклицательным занком в имени тоже обрабатывались?
     
     

    Всего записей: 25 | Зарегистр. 01-10-2007 | Отправлено: 12:51 27-01-2011
    res2001



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

    Цитата:
    Как сделать так чтобы файлы с восклицательным занком в имени тоже обрабатывались?  

    надо убрать эту строку  
    SetLocal EnableDelayedExpansion  
    и переделать батник так, чтоб работал без нее.
     
    Добавлено:
    NeoNemesis

    Цитата:
    Есть способ реализовать поставленную задачу более компактным батником?

    можно обрабатывать вывод команды:
    dir /O:S /-C /A:-D
    первый файл будет самым маленьким, последний - самым большим.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:31 27-01-2011 | Исправлено: res2001, 13:32 27-01-2011
    NeoNemesis



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

    Цитата:
    dir /O:S /-C /A:-D  
    первый файл будет самым маленьким, последний - самым большим.

     
    Не, задача состоит именно в том, чтобы выводились только самый малый и самый большой файлы (имена файлов, их размеры и даты создания) в заданном каталоге и его подкатологах.

    Всего записей: 4 | Зарегистр. 21-01-2011 | Отправлено: 13:45 27-01-2011
    res2001



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

    Цитата:
    и его подкатологах.

    тогда так:
    dir /O:-S /-C /A:-D /S /B
     
    Добавлено:
    Нет не пойдет, дир сортирует файлы внутри каждого каталога отдельно.
     
    Ну тогда могу посоветовать только объединить два твоих цикла в один, не вижу смысла делать два прохода по одним и тем же каталогам.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 14:03 27-01-2011
    bredonosec



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

    Цитата:
    Да, sc управляет сервисами.

    мне непонятно еще такое.. Почему-то, если я батником копирую на удаленную машину бат с командой перезапуска сервиса времени, а потом псексеком запускаю его - срабатывает. Пишет, что остановлена служба, запущена..  
    А если напрямую посылаю указания через sc остановить-запустить - пишет, что служба не может быть ни остановлена, ни поставлена на паузу, ничего.  

    Цитата:
    SERVICE_NAME: w32time
            TYPE               : 20  WIN32_SHARE_PROCESS
            STATE              : 3  STOP_PENDING
                                    (NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
            WIN32_EXIT_CODE    : 0  (0x0)
            SERVICE_EXIT_CODE  : 0  (0x0)
            CHECKPOINT         : 0x1
            WAIT_HINT          : 0x3e8
     

    При попытке ресинхронизации также кидает ошибку  

    Цитата:
    Sending resync command to local computer...
    The following error occurred: The RPC server is unavailable. (0x800706BA)
    C:\windows\system32\w32tm exited on (имя компа) with error code -2147023174.

     
    почему? есть какие-то ограничения особые на то, как именно запускать?

    ----------
    Вопрос: 'Что человек курит?' как правило возникает не когда ты слышишь, как он дышит, а когда видишь, что он пишет
    Пропеллер играет роль вентилятора, он останавливается -пилот потеет
    Аськи нету.

    Всего записей: 16257 | Зарегистр. 13-02-2003 | Отправлено: 14:28 27-01-2011
    Verter



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Задача, Google books:
    Нужно пройтись с файла 1.png по файл 100.png и если какого-то файла (например 53.png) не существует, то сделать copy _blank.png 53.png. Как реализовать?

    Всего записей: 598 | Зарегистр. 10-01-2004 | Отправлено: 15:10 27-01-2011
    res2001



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

    Код:
    @echo off
    for /l %%a in (1,1,100) do if not exist %%a.png copy /b/y _blank.png %%a.png

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 15:38 27-01-2011
    king_stiven

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

    Цитата:
    но какой-то он уж больно громоздкий.

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

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 16:20 27-01-2011
    Symrak



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

    Цитата:
    надо убрать эту строку  
    SetLocal EnableDelayedExpansion  
    и переделать батник так, чтоб работал без нее.

     
    Не подскажеш как это сделать? Чесно говоря батник нашел в нете и для собственного использования подставляю пути в Source и Output.
     
    Я так понял SetLocal EnableDelayedExpansion назначает использование папки из которой он запущен как корневую?
     
    Так будет правельно?
     
     
    Код:
     
    @Echo Off  
     
    Set Source=C:\work\
    Set Output=C:\out\
    Set UsersLog=C:\_List.txt  
     
    For /F "UseBackQ Tokens=*" %%A In ("%UsersLog%") Do (  
        Echo %%A|FindStr :>nul&&(Set OutputDir=%%A&MD "%Output%\!OutputDir:~0,-1!" 2>nul)||Move /Y "%Source%\%%A.*" "%Output%\!OutputDir:~0,-1!" 1>nul  
    )  
    EndLocal  
     

     
    или еще что-то нужно менять?

    Всего записей: 25 | Зарегистр. 01-10-2007 | Отправлено: 16:30 27-01-2011
    res2001



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

    Код:
     
    @Echo Off
    Set Source=%CD%\
    Set Output=%CD%
    Set UsersLog=%CD%\_List.txt
     
    For /F "UseBackQ Tokens=*" %%A In ("%UsersLog%") Do (
        Echo %%A|FindStr :>nul&&(Set OutputDir=%%A & call MD "%Output%\%%OutputDir:~0,-1%%" 2>nul) || call Move /Y "%Source%\%%A.*" "%Output%\%%OutputDir:~0,-1%%" 1>nul
    )

    Как-то так.
    Не тестировал.

    Цитата:
    Я так понял SetLocal EnableDelayedExpansion назначает использование папки из которой он запущен как корневую?  

    Не правильно ты понял.
    Чти setlocal /?

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 16:44 27-01-2011
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
     
     
    Добавлено:
    NeoNemesis
    Вот есть у меня батник, отработал в 5 раз быстрее твоего, но раза в 3 громоздкее. )

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 16:45 27-01-2011 | Исправлено: king_stiven, 16:46 27-01-2011
    Verter



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    Дико извиняюсь, думал детали уже сам дошлифую, но продолбился с "Ошибкой в синтаксисе команды". Исходная задача звучит так. Нужно пройтись с файла PA1.png по файл PA100.png в текущей папке и:
    1) если файл (например PA67.png) существует - скопировать его в папку "2" которая лежит в текущем каталоге;
    2) если файла (например РА13.png) НЕ существует - скопировать вместо него в папку "2" файл _blank.png.
    Как это до-реализовать?

    Всего записей: 598 | Зарегистр. 10-01-2004 | Отправлено: 22:02 27-01-2011
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Verter
    Код:
     
    for /l %%a in (1,1,100) do 1>nul 2>nul copy /b/y  pa%%a.png 2\ || copy /b/y _blank.png 2\pa%%a.png

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 22:21 27-01-2011
    kostyamks



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как исправить проблему с занесением данных в hosts фаил:
     
    @echo off  
    cls  
    if "%OS%"=="Windows_NT" ( set hostfile=%systemroot%\system32\drivers\etc\hosts ) else ( set hostfile=%systemroot%\hosts )  
    echo.>> %hostfile%  
    echo 127.0.0.1 nero.com>> %hostfile%  
    echo 127.0.0.1 my.nero.com>> %hostfile%  
    echo 127.0.0.1 secure.nero.com>> %hostfile%  
    echo 127.0.0.1 support.nero.com>> %hostfile%  
    echo 127.0.0.1 registernero.com>> %hostfile%  
    ipconfig /flushdns  
    echo Overdone!  
    pause

     

    Всего записей: 284 | Зарегистр. 12-09-2009 | Отправлено: 14:05 28-01-2011 | Исправлено: kostyamks, 14:07 28-01-2011
       

    Страницы: 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 104 105 106 107 108

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 10
    vu1tur (29-07-2011 12:47): Задачи на bat-файлах 11


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru