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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
    А зачем так сложно?
     
    SPV_Ed
    Если известно последнее число (самое большое), можно так:

    Код:
     
    @echo off
    setlocal
    set "last=400"
    for /l %%a in (1,1,%last%) do if exist %%a.jpg (process.exe %%a.jpg)
     

    Вместо 400, пишем это самое число (на самом деле не принципиально какое - можно просто написать заведомо большое число), а вместо process.exe - утилиту обработки.


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:38 10-08-2007
    01MDM



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

    Цитата:
    А зачем так сложно?

     
    Зато dir /b все выводит по порядку, и в проводнике тоже.

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



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

    Цитата:
    Переименнуй, так чтоб начинались с нуля, 001.jpg, 002.jpg и т.д  

    А толку то? Они переименуются в том порядке, в каком они перечислены в "dir /b", т.е. при этом новые порядковые номера будут иными.
     
    Добавлено:
    Elroir

    Цитата:
    Если известно последнее число (самое большое), можно так:

    Количество файлов подсчитать не проблема:

    Код:
    set filecount=0
    for /f %%i in ('dir /b') do set /a filecount+=1

    Но дальше - что? Раз dir не в силах, то может как-то организовать вывод в файл имена файлов по порядковому номеру, а потом уже этот файл через type я его пристрою куда следует в цикл?

    Всего записей: 474 | Зарегистр. 20-06-2006 | Отправлено: 20:12 10-08-2007
    NIKZZZZ



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

    Цитата:
    организовать вывод в файл имена файлов по порядковому

     

    Код:
    @echo off
    ;setlocal enabledelayedexpansion
    echo. 1>nul 2>tmp.txt  
    for  %%i in (*.jpg) do (
        call:_prefics %%~ni "%%~dpnfi"
    )
    type tmp.txt | sort >tmp1.txt
    goto:eof
    :_prefics
    set c=%1
    if %c% leq   9 set pref=000%c%
    if %c% gtr   9 set pref=00%c%
    if %c% gtr  99 set pref=0%c%
    if %c% gtr 999 set pref=%c%
    echo %pref%,%2 >>tmp.txt  
    goto:eof

     
    Содержимое файла tmp1.txt примерно такое:
    0001,"E:\1\1.jpg"
    0002,"E:\1\2.jpg"
    0010,"E:\1\10.jpg"
     
    Он правильно отсортирован, а первые 5 символов обрезать не проблема.
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 21:19 10-08-2007 | Исправлено: NIKZZZZ, 21:20 10-08-2007
    Elroir



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

    Цитата:
    Но дальше - что?  Раз dir не в силах, то может как-то организовать вывод в файл имена файлов по порядковому номеру, а потом уже этот файл через type я его пристрою куда следует в цикл?

    Не надо подсчитывать количество файлов, надо всего лишь подставить самое большое число, которое существует.
    Если вместо "process.exe" в моем коде, ты подставишь "echo" - у тебя будет список файлов по порядку (числовому).
    А вообще, не очень понятно, что тебя надо сделать - в какой цикл тебе нужно засунуть файлы?
     
    Добавлено:
    Кстати:

    Цитата:
    А толку то?  Они переименуются в том порядке, в каком они перечислены в "dir /b", т.е. при этом новые порядковые номера будут иными.

    После переименования, dir будет выдавать их именно в том порядке, который тебе нужен. Числа то остались прежними - просто добавились нули слева. Поэтому сортировка dir-а получится правильной.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 21:53 10-08-2007
    NIKZZZZ



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

    Цитата:
    подставить самое большое число, которое существует

    И подождать несколько сотен лет

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:04 10-08-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Ага  
    Но я, конечно же, имел в виду самое большое число из названий файлов.
    P.S. Самое большое число, которое воспринимает CMD - это 2147483647.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 22:06 10-08-2007 | Исправлено: Elroir, 22:11 10-08-2007
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
     
    получилось таки запустить Ваши cmd как сервисы,
    нашел решение на мой взгляд удобнее
     
    вот http://support.microsoft.com/default.aspx?scid=kb;[LN];243486
    оцените может даже положите в шапку
     
    все работает даже если сделать logoff всех пользователей
    запущены как сервисы с правами Local System
     
    еще раз огромное спасибо

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 01:27 11-08-2007
    dominiksus



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    здраствуйте всезнающий Олл! помогите пожал. решить такую задачу средтвами батфайла.мне нужно при загрузке винды синхронизировать время через ntp сервер,но проблема лежит в том что сеть еще не поднялась (интернета нет) а батник уже запускается и естествено ничего не может синхронизировать. там нужно гдето секунд 10 подождать и потом уже запускать.
    нужно в батнике проверить или есть интернет, и если да, то запускать команду синхронизации времени.
    как?

    Всего записей: 119 | Зарегистр. 11-08-2007 | Отправлено: 11:04 11-08-2007
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    мужики, есть ли возможность сценарием или командой отобразить такой символ ???

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 11:20 11-08-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dominiksus
    Стандартныи средсвами время не обновляется никак, почему не знаю, даже если меняешь ntp-сервер, поэтому использую альтернативу.  
     

    Код:
     
    @ECHO OFF
     
    :: 10 sec timeout
    ping -n 11 localhost >nul
     
    for /f "tokens=9 delims== " %%i in ('ping google.com ^| find "TTL"') do (
        set PingGood=%%i
        )
     
    if %PingGood%==TTL (
        goto TimeUpdate
        ) else (
        GOTO:EOF
        )
     
    :TimeUpdate
    net time /set
    :: start "" "%USERPROFILE%\BIN\neutron\Neutron.exe"
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 12:28 11-08-2007
    dominiksus



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

    Цитата:
    :: start "" "%USERPROFILE%\BIN\neutron\Neutron.exe"  

    01MDM
    это что за нейтрон,такого не нашел у себя

    Всего записей: 119 | Зарегистр. 11-08-2007 | Отправлено: 13:47 11-08-2007
    vu1tur



    Moderator-Saaber
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Nagual
    три знака вопроса?
    символ можно показать только тот, который присутствует в текущей кодовой таблице (а меняется она командой chcp).
     
    01MDM

    Цитата:
    Стандартныи средсвами время не обновляется никак, почему не знаю, даже если меняешь ntp-сервер, поэтому использую альтернативу.

    Почему это никак?

    Код:
     
    w32tm /resync
     


    ----------
    I am free of all prejudice. I hate everyone equally.

    Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 14:25 11-08-2007
    dominiksus



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

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

    обновляется
    батник если его вручную запускать
    net time /setsntp:"сервер1 сервер2"

    Всего записей: 119 | Зарегистр. 11-08-2007 | Отправлено: 14:59 11-08-2007
    01MDM



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

    Цитата:
    это что за нейтрон,такого не нашел у себя

    Это можешь удалить, программа для синхронизации времени.
     

    Код:
     
    # w32tm /resync
    Команда синхронизации отправлена на local computer...
    Обнаружена следующая ошибка: Сервер RPC недоступен. (0x800706BA)
     
    # net time /setsntp:"time.windows.com time-nw.nist.gov clock.psu.edu"
    Не удалось найти сервер времени.
     
    Для вызова дополнительной справки наберите NET HELPMSG 3912.
     

     
    Не обновляется даже если через панель управления. Служба времени запущена. Причем на разных компьютерах. Pro и Номе.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:27 11-08-2007
    dominiksus



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

    Цитата:
    # net time /setsntp:"time.windows.com time-nw.nist.gov clock.psu.edu"  
    Не удалось найти сервер времени.

    странно, у меня данная конструкция синхронизирует часы:
    net time /setsntp:"ntp2.cs.wisc.edu ntp1.cs.wisc.edu"
    может у Вас firewall блокирует?
    попробуйте с этих адресов

    Всего записей: 119 | Зарегистр. 11-08-2007 | Отправлено: 15:32 11-08-2007 | Исправлено: dominiksus, 15:32 11-08-2007
    vu1tur



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

    Цитата:
    Обнаружена следующая ошибка: Сервер RPC недоступен. (0x800706BA)

    это уже, пожалуй, вопрос не для этой темы, посмотри темы фильтром по синхронизации в этом разделе и в сисадмах.

    ----------
    I am free of all prejudice. I hate everyone equally.

    Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 19:07 11-08-2007 | Исправлено: vu1tur, 19:07 11-08-2007
    dominiksus



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    01MDM  
    правильно я понимаю, батник должен без лишнего выглядеть так ?

    Цитата:
    @ECHO OFF  
     
    :: 10 sec timeout  
    ping -n 11 localhost >nul  
     
    for /f "tokens=9 delims== " %%i in ('ping google.com ^| find "TTL"') do (  
        set PingGood=%%i  
        )  
     
    if %PingGood%==TTL (  
        goto TimeUpdate  
        ) else (  
        GOTO:EOF  
        )  
     
    :TimeUpdate  
    net time /setsntp:"ntp2.cs.wisc.edu ntp1.cs.wisc.edu"
    :: start ""...""  
     


    Всего записей: 119 | Зарегистр. 11-08-2007 | Отправлено: 20:14 11-08-2007
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dominiksus
    Все, что начинается с "::" это комментарий. Эти можно убрать. И еще по поводу синхронизации

    Код:
     
    net time /setsntp:"ntp2.cs.wisc.edu ntp1.cs.wisc.edu"
     

    Эта комманда назначает сервера для синхронизации, но не производит саму. Я в предыдущем   посте неправильно скопировал, в конце строчки еще должно быть "/set"
     

    Код:
     
    net time /setsntp:"ntp2.cs.wisc.edu ntp1.cs.wisc.edu" /set
     
    или если не получилось, то
     
    w32tm /resync
     

     
    Проверь, переведи системое время и запусти команду.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:34 11-08-2007
    dominiksus



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    @ECHO OFF  
    ping -n 11 localhost >nul  
    for /f "tokens=9 delims== " %%i in ('ping google.com ^| find "TTL"') do (  
        set PingGood=%%i  
        )  
       
    if %PingGood%==TTL (  
        goto TimeUpdate  
        ) else (  
        GOTO:EOF  
        )  
       
    :TimeUpdate  
    net time /setsntp:"ntp2.cs.wisc.edu ntp1.cs.wisc.edu"  
    w32tm /resync

     
    такой в резултате получился батник.
    net time /setsntp действительно не синхронизирует сами часы, а только назначает сервер(а)
    однако, я не ставил /set в конце строки, поскольку проверил командой net time /querysntp и он показал именно мои 2 сервера
    спасибо за помощь, буду тестить

    Всего записей: 119 | Зарегистр. 11-08-2007 | Отправлено: 22:20 11-08-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