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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 109 110 111 112 113 114 115 116 117

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sL4yer
    Цитата:
    подскажите, как записать в переменную результат работы команды?  
    это делается через for /f "delims=" %%a in (' command ') do set "result=%%a"
    Цитата:
    for %%i in (*%EXT%) do (
      if exist %DIRECTORY%\%%i && set C=1
      set name=echo %%i|sed s/%EXT%//
      echo %name%
    )  
    а тут вообще привлекать sed незачем...
    Цитата:
    мне нужно взять имя файла без расширения из директории
    по твоему варианту это не скажешь - в нем имя берется от файла в текущей, а с=1 устанавливается только если такой же файл есть и в %DIRECTORY% тоже.
     
    И замечу что echo %name% внутри цикла работать так как ты надеялся - не будет.
     
    А хотел ты похоже что-то такое:

    Код:
    for %%i in (*%EXT%) do set "name=%%~ni" && if exist %DIRECTORY%.\%%i set "C=1"
    echo %name%
    или такое
    Код:
    for %%i in (*%EXT%) do if exist %DIRECTORY%.\%%i set "C=1" && set "name=%%~ni"
    echo %name%

     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 19:07 18-09-2009 | Исправлено: wolf0425, 21:29 18-09-2009
    sL4yer



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    спасибо за всё, я уже разобрался.
     
    Добавлено:
    wolf0425

    Код:
     
    @echo on
     
    setlocal enabledelayedexpansion
    set DIRECTORY=C:\pics\copy\
    set EXT=.jpg
     
    for %%i in (*%EXT%) do (
      if exist %DIRECTORY%%%i set C=1
      set "name=%%~ni"
      ren %%i !name![!C!]%EXT%
      move !name![!C!]%EXT% %DIRECTORY%
    )
     

     
    немножко другое получилось. Потом еще модифицирую, что б наращивало цифры, если такая уже занята. Если хочешь - подскажи.
     
    P.S. да и эхо забыл выключить :)
     
    вот такого намудрил...

    Код:
    @echo off
     
    setlocal enabledelayedexpansion
    set DIRECTORY=C:\pics\copy\
    set EXT=.jpg
     
    set C=
    :start
    set /a C=%C%+1
    for %%i in (*%EXT%) do (
      set "name=%%~ni"
      if exist %DIRECTORY%!name![%C%]%EXT% (
        goto start
      ) else (
        if exist %DIRECTORY%%%i (
          ren %%i !name![%C%]%EXT%
          move !name![%C%]%EXT% %DIRECTORY%
        ) else (
          move %%i %DIRECTORY%
        )
      )
    )

    Всего записей: 49 | Зарегистр. 22-10-2008 | Отправлено: 22:28 18-09-2009 | Исправлено: sL4yer, 23:52 18-09-2009
    wolf0425



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

    Цитата:
    Потом еще модифицирую, что б наращивало цифры, если такая уже занята. Если хочешь - подскажи.  
    наверно ты вот такое хотел:

    Код:
    @echo off
    set DIRECTORY=C:\pics\copy
    set EXT=.jpg
     
    for %%i in (*%EXT%) do call :renm "%%~ni"
    goto :eof
     
    :renm
    if not exist %DIRECTORY%\%1%EXT% move %1%EXT% %DIRECTORY%\ & goto :eof
    set "C=1"
    :next
    if exist %DIRECTORY%\%1[%c%]%EXT% set /a c += 1 & goto :next
    move %1%EXT% %DIRECTORY%\%1[%c%]%EXT%
    goto :eof


    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 01:58 19-09-2009 | Исправлено: wolf0425, 02:55 19-09-2009
    ZolotnikOV



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!  
     
    Такая ситуация:  
    нужно с локальных машин подключаться на удаленний сервер напрямую. что бы пользователь не работал в виндовсе локальной машини.  
     
    на локальной машине будет 2 пользователя: админ и user#  
    для user# я заменил в реестре проводник на RDС. теперь при входе в систему сразу выдает Окошко подключения к удаленному компьютеру. такой себе недо"Тонкий клиент"))  
     
     но проблема заключается в том, что когда закрыть  RDС, то видим только картину и ничего не работает (так как проводника я вырубил, а RDС не перегружается автоматом).  
     
    приходиться через Диспетчер задач вызывать експлорера, либо завершать сеанс и входить по новому. А в идеале нужно было бы и его запретить запускать.  
     вот пришла мне мысль сделать для этого какой то батник что бы контролировал наличие подключения по  RDP (например проверка на предмет использования порта 3389 если не ошибаюсь) и в случае отсутсвия перезапускать RDС.  
     
    Я вообще юрист и мне сложно написать что то такое, поэтому прошу помощи.  
    Это вообще возможно?  
    Заранее благодарен.

    Всего записей: 393 | Зарегистр. 26-11-2007 | Отправлено: 21:09 19-09-2009
    tolyn77



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите можно как нибудь из командной строки получить ключ винды и офиса?

    Всего записей: 1501 | Зарегистр. 07-09-2004 | Отправлено: 07:49 20-09-2009
    Stritch

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите пожалуста!  
     
    Есть задача...
    Составить батник создающий каталог d:/students_3_g/Фамилия и обеспечивающий пользователю Фамилия  следующие сетевые права-доступ отсутствует.  
     
    И вторая.
    Составить бат файл выводящий список файлов содержащихся в каталоге system32 в именах которых,состоящих не более чем из трех букв,содержится не более чем один раз буква "а"
     
    Буду премного благодарен за помощь!

    Всего записей: 39 | Зарегистр. 12-07-2006 | Отправлено: 23:08 20-09-2009
    01MDM



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

    Цитата:
    И вторая.
    Составить бат файл выводящий список файлов содержащихся в каталоге system32 в именах которых,состоящих не более чем из трех букв,содержится не более чем один раз буква "а"  


    Код:
     
    @echo off
    dir /b /a-d C:\Windows\System32 | findstr /i "^a[^a][^a]\..*$ ^[^a]a[^a]\..*$ ^[^a][^a]a\..*$" 1>list.txt
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 01:07 21-09-2009 | Исправлено: 01MDM, 07:33 21-09-2009
    wolf0425



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

    Цитата:
    \..*
    01MDM, это предполагается что файлов без расширения (например abc) в каталоге System32 не окажется? Или я чего-то в регэкспе не понял?  
     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 13:01 21-09-2009 | Исправлено: wolf0425, 13:03 21-09-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Кроме того может существовать файл и с точкой в названии (например abc.def.txt)
    В общем случае и этот вариант подойдет, просто не хотелось запускать в цикле и смотреть каждый %%~ni. Да и задача больше смахивает на домашнее задание. В прошлом году спрашивали нечто похожее.
     
    Ну и регэкспы в findstr..
     
    Можно еще так:

    Код:
     
    @echo off
    setlocal
     
    pushd %SystemRoot%\system32
    for %%i in (a??.* ?a?.* ??a.*) do call:1 %%i
    popd
    goto:eof
     
    :1
    set "name=%~n1"
    if not "%name:~2,1%"=="" echo %~n1 | 1>nul findstr /i /v "a.*a" && echo %1 1>>"%~dp0list.txt"
     

     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:58 21-09-2009 | Исправлено: 01MDM, 15:19 21-09-2009
    Stritch

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

    Всего записей: 39 | Зарегистр. 12-07-2006 | Отправлено: 22:51 21-09-2009
    ferritus

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Какой переменной определить локальную папку из которой производится запуск bat'ника?
    Разобрался

    Всего записей: 156 | Зарегистр. 26-05-2006 | Отправлено: 23:13 21-09-2009 | Исправлено: ferritus, 23:41 21-09-2009
    korosya

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

    Всего записей: 1008 | Зарегистр. 19-07-2003 | Отправлено: 01:16 22-09-2009
    Shadow4



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

    Нужен батник на рестарт виндовс.
     
    Заранее огромное спасибо!

    Всего записей: 257 | Зарегистр. 18-01-2009 | Отправлено: 15:42 23-09-2009
    ShriEkeR



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Shadow4
    shutdown /r

    ----------
    Absit invidia verbo

    Всего записей: 6382 | Зарегистр. 27-09-2004 | Отправлено: 15:44 23-09-2009
    anachrom

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Уже спрашивал, так никто и не откликнулся. Спрошу еще раз.
    Подскажите как осуществить условие:
    если процесс запущен то ... иначе ...
    если процесс запущен 2 и более раза то ... иначе ...
    заранее спасибо.

    Всего записей: 179 | Зарегистр. 18-11-2008 | Отправлено: 16:06 23-09-2009
    slech



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите как выполинть цикл 100 раз скажем
     
    спасибо.

    Всего записей: 4893 | Зарегистр. 10-11-2004 | Отправлено: 16:18 23-09-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    slech FOR /L %%a IN (1,1,100) DO echo %%a
     
    anachrom
    Цитата:
    если процесс запущен то ... иначе ...
    А там точно обе ветки непусты - и положительная и отрицательная?
    Код:
    tasklist | find /i "process.exe" && echo "process.exe" is runnign && goto :_L
    echo "process.exe" is not running
    :_L
    Если какая-то ветка пустая - всё вырождается в одну строку
    Цитата:
    если процесс запущен 2 и более раза то ... иначе ...  

    Код:
    set countproc=0
    for /f %%a in (' tasklist.exe /fo csv ^| findstr /i "process.exe" ') do set /a countproc +=1
    if %countproc% GEQ 2 (echo 2+ copy) else (echo иначе)

     

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 16:41 23-09-2009 | Исправлено: wolf0425, 22:16 23-09-2009
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    set "cnt=0"
    for /f %%i in ('tasklist ^| findstr process.exe') do set /a cnt+=1
    if not %cnt% equ 0 (
        if not %cnt% gtr 1 (
             echo Only one copy of the program
        ) else (
             echo Some copies of the program
        )
    ) else (
        echo Process not found
    )    
     

     
    slech

    Код:
     
    for /l %%i in (0,1,99) do (
        for .......
    )
     

     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:52 23-09-2009
    Shadow4



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





    спасибы — в ПМ!

    Всего записей: 257 | Зарегистр. 18-01-2009 | Отправлено: 10:26 24-09-2009 | Исправлено: vu1tur, 17:34 24-09-2009
    dragon83

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, как решить задачу? Нужно проверить дату файла 1 в каталоге A, сравнить с датой файла 2 в каталоге B и если она раньше то выполнить определенное действие, в частности скопировать файл 1 в каталог B.    

    Всего записей: 1 | Зарегистр. 03-09-2009 | Отправлено: 17:01 24-09-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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru