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

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

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

vu1tur (27-04-2007 11:55): продолжаем в теме «Задачи на bat-файлах 3»  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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-файлах (часть 1)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 16:59 14-11-2006 | Исправлено: Elroir, 04:30 26-04-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хотя и нет никакой сложности в три строки правильно прибавить NN минут к %time%, но с запуском по at на чужом компе может быть ещё и другая проблема - что локальное время на том компе не совпадает с местным.
    так что PSEXEC.EXE -  более симпатичный вариант, да и результат дает немедленно.
     
    Кстати, а если у текущего юзера есть права администратора на удаленном компе - то с ключем -s (от имени системы) программа там запускается без указания паролей в команде.
     
     
     

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 11:27 25-04-2007
    Gabzya



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    vu1tur
    Maza Faka
    вощем пробовал и так и так, висит долго окно, и все, не переименовывает,собственно:
    Цитата:
     @echo off
    setlocal enabledelayedexpansion
     
    set first_symb=і
    set second_symb=ї
    set third_symb=І
    set forth_symb=Ї
     
    :rendir
    for /f "tokens=*" %%a in ('dir /b /a:d /s') do (
       set dirname=%%a
       set dirname=!dirname:%first_symb%=1!
       set dirname=!dirname:%second_symb%=2!
       set dirname=!dirname:%third_symb%=3!
       set dirname=!dirname:%forth_symb%=4!
       move "%%a" "!dirname!" 2>nul | find "Перемещено" && goto rendir
    )
     
    :renfiles
    for /f "tokens=*" %%a in ('dir /b /a:-d /s') do (
       set filename=%%~nxa
       set filename=!filename:%first_symb%=1!
       set filename=!filename:%second_symb%=2!
       set filename=!filename:%third_symb%=3!
       set filename=!filename:%forth_symb%=4!
       ren "%%a" "!filename!"
    )

    немного поменял Tipulatoidский

    Всего записей: 1149 | Зарегистр. 14-12-2004 | Отправлено: 11:32 25-04-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    wolf0425
    Если компы в домене, то синхронизация времени настравается очень легко
    Если не в домене - что чуть сложнее
     
    , что позволяет решить много проблем

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 11:35 25-04-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Gabzya
    Какой язык у твоей Винды? (русский, украинский, английский)
    Попробуй в командной строке выполнить команды:

    Код:
    md testfolder
    move testfolder testfolder2
    rd testfolder2

    И напиши здесь, какие сообщения на экран выводятся (именно так, как на экране, не пропуская ни одного символа)
    Добавлено:
    wolf0425

    Цитата:
    Хотя и нет никакой сложности в три строки правильно прибавить NN минут к %time%, ...

    Приведи пример кода, плиз. Интересно просто.

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 11:42 25-04-2007 | Исправлено: Tipulatoid, 11:49 25-04-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBelты что, предлагаешь, по вкусу
    1. батником проверять, правильно ли настроено время
    2. батником настраивать время правильно
    3. полагаться на удачу, что сидящему за компом ххх юзеру прямо сейчас не приспичило поправить время из каких-то собственных потребностей???
     
    кстати, ты наверно никогда не видел, чтоб компы, находящиеся в одном домене, были в разных часовых поясах
     
    никто в общем-то не спорит, что проблема синхронизации времени вполне решаема, но зачем её решать только для того чтобы что-то запустить на другом компе?
     
     
    Tipulatoid
    set /a     time#n=(0%time:~0,1%)*600 + (%time:~1,1%)*60 + (%time:~3,1%)*10 + (%time:~4,1%) + %delay%
    if %Time#n% GEQ 1440 set /a Time#n=%Time#n%-1440
    Set /a    Time#h=(%Time#n%)/60
    Set /a     Time#m=%Time#n%-(%Time#h%*60)
     
    проверка что задержка в минутах (delay) больше суток - мне пока не нужна была

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 11:49 25-04-2007 | Исправлено: wolf0425, 11:52 25-04-2007
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если кто часто пользуется отложенным запуском программ(через 30 секунд, через 120 секунд и т.п.), то для этого у Microsoft есть утилита комстроки soon.exe, юзать вместо AT, дабы не изгаляться с подсчетом времени в батниках.
    http://www.microsoft.com/downloads/details.aspx?familyid=ca8191e6-9eef-4975-b51c-8d670748ca8e&displaylang=en

    Всего записей: 1674 | Зарегистр. 08-12-2004 | Отправлено: 11:56 25-04-2007
    Gabzya



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoidрусская
    Цитата:
     Microsoft Windows [Версия 5.2.3790]
    (С) Корпорация Майкрософт, 1985-2003.
    C:\Documents and Settings\gabzya.HQ> md testfolder
    C:\Documents and Settings\gabzya.HQ>move testfolder testfolder2
            1 папок перемещено.
    C:\Documents and Settings\gabzya.HQ>rd testfolder2
    C:\Documents and Settings\gabzya.HQ>

    З.Ы. забыл сказать, что во время выполнения батника такое:

    Цитата:
    Ошибка в синтаксисе команды.
    Не удается найти указанный файл.
    Синтаксическая ошибка в имени файла, имени папки или метке тома.

    Всего записей: 1149 | Зарегистр. 14-12-2004 | Отправлено: 12:04 25-04-2007 | Исправлено: Gabzya, 12:09 25-04-2007
    KapralBel



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

    Цитата:
    KapralBelты что, предлагаешь, по вкусу
    1. батником проверять, правильно ли настроено время
    2. батником настраивать время правильно
    3. полагаться на удачу, что сидящему за компом ххх юзеру прямо сейчас не приспичило поправить время из каких-то собственных потребностей???  

    1.Просто ты не сталкивался с задачами, которые требуют (а для многих желательно) - синхронизация времени
    2. Можно и так Net Time /?
    3. Ну если у тебя пользователи имеют слишком много прав - то проблемы не заставят себя ждать

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 12:05 25-04-2007
    Tipulatoid



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Gabzya
    Попробуй исправить
    Цитата:
    move "%%a" "!dirname!" 2>nul | find "Перемещено" && goto rendir

    на

    Цитата:
    move "%%a" "!dirname!" 2>nul | find /i "Перемещено" && goto rendir

     
    По моему разумению, должно помочь
     
    Кроме того, ты надеюсь не забыл исправить в начале батника в строках с 4 по 7 символы именно на те, что стоят именно в названиях файлов и папок. Я туда забивал латинские аналоги?
    Что еще? Когда копировал код с форума пробелы в конце строк удалил?

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 12:27 25-04-2007 | Исправлено: Tipulatoid, 12:33 25-04-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
    1. почему не сталкивался? сталкивался - вот только через net time они не решались
    2. можно. а нафига, когда можно этого не делать, не ждать в среднем полминуты до запуска программы на соседнем компе и не иметь потенциальных проблем с п3
    3. компы, где залогинились другие администраторы - ничуть не хуже всех прочих, проверять кто где залогинился и чем занимается - не дело мелкого батника.

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 12:53 25-04-2007 | Исправлено: wolf0425, 12:54 25-04-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka
    Если не сложно, проверяй код, прежде чем выложить его.
    Следующий код показывает текущее время + одна минута:

    Код:
     
    @echo off
    setlocal
    set "hour_to_run=%time:~0,2%"
    set "min_to_run=%time:~3,2%"
    if %hour_to_run% lss 10 set "hour_to_run=%hour_to_run:~-1%"
    if %min_to_run% lss 10 set "min_to_run=%min_to_run:~-1%"
    set /a "min_to_run+=1"
    if %min_to_run%==60 (
    set "min_to_run=0"
    set /a "hour_to_run+=1"
    if %hour_to_run%==24 set "hour_to_run=0"
    )
    if %hour_to_run% lss 10 set "hour_to_run=0%hour_to_run%"
    if %min_to_run% lss 10 set "min_to_run=0%min_to_run%"
    set "time_to_run=%hour_to_run%:%min_to_run%"
    echo %time_to_run%
     

    Это так - в качестве примера.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 13:35 25-04-2007
    Gabzya



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tipulatoid
    заменил, в конце нет 100 %,
    Цитата:
    По моему разумению, должно помочь  
    пробую
     
     
    Добавлено:
    та же фигня

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



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Elroir
    Да я так, наскоряк его выложил, не проверив предварительно... Впредь торопиться не буду!

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 15:49 25-04-2007 | Исправлено: Maza Faka, 15:57 25-04-2007
    ProbaRK

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Прошу помочь, если кто знает как из командной строки удаленно выполнить logoff console user(s), после выполненного на удаленной машине "psshutdown.exe -l \\workstation" не перегружая ее. Сеть одноранговая, на компьютерах используется Fast user Switching (быстрое переключение пользователей). Т.е. хотелось бы "выбросить" всех локально залогиненых пользователей, чьи сеансы остались не закрытыми, а на экране компьютера в это время отображается Wellcom screen (Экран приглашения).

    Всего записей: 82 | Зарегистр. 08-02-2005 | Отправлено: 16:17 25-04-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Gabzya
    В начале батника убери строку "@echo off", запусти его и выложи результат - иначе невидно откуда ошибки.
     
    Добавлено:
    Мне помнится, что подобное уже в топике было. Если не ошибаюсь, проблема в том, что некоторые команды не любят работать с именами файлов/директорий в кавычках, когда они (команды) исполняются в for-е.

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:24 25-04-2007
    Maza Faka



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

    Цитата:
    Если не сложно, проверяй код, прежде чем выложить его.  
    Следующий код показывает текущее время + одна минута

    Ну и чем он отличается от этого кода:

    Код:
     
    @Echo off  
    Set CurTime=%Time:~3,2%  
    Set /a CurTime+=1  
    If %CurTime% LEQ 9 (Set CurTime=0%CurTime%)  
    If "%CurTime%"=="60" (Set CurTime=00)  
    Set CurTime=%Time:~0,2%:%CurTime%
     

    показывает текущее время + 1 минута, без секунд, для планировщика не пойдёт, он затребует секунды...

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 16:38 25-04-2007 | Исправлено: Maza Faka, 16:40 25-04-2007
    Tipulatoid



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

    Цитата:
    та же фигня  

    Понятия не имею Буду думать В течении ближайших 24 часов отпишусь

    Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 16:40 25-04-2007
    KapralBel



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Maza Faka
    большинство планировщиков мягко говоря необращают внимания на отсутствие секунд

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 16:42 25-04-2007
    Elroir



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

    Цитата:
    Ну и чем он отличается от этого кода

    Хотя-бы тем, что у тебя некорректно добавляется единица - если число минут меньше 10, первым идет 0, а cmd воспринимает такие числа как восьмеричные. Поэтому результат вычисления будет неверным. Дальше - допустим у нас 15:59. И какое у тебя получится время? 15:00. А если 23:59?
    Планировщик, кстати, секунд не требует (по крайней мере, команда at).  

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:47 25-04-2007
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maza Faka отличается код тем, что у тебя гнилая связка на преобразование типов
    для просветления запусти  
    Set CurTime=%Time:~3,2%  
    set CurTime=09
    echo %CurTime%
    Set /a CurTime+=1
    echo %CurTime%

    Всего записей: 2920 | Зарегистр. 25-04-2007 | Отправлено: 16:50 25-04-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 100

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


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru