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

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

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

vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

Nagual



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

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

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

  • Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 12:28 19-03-2008 | Исправлено: Nagual, 01:02 24-09-2008
    angeltwo

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JI063uk
     
    psexec @list.txt -e -d "C:\111\1.exe"
    (psexec из PsTools неоднократно тут упоминавшихся)
     
    Elroir
    Ни разу не добавлял лишние кавычки перед именами с пробелами в кавычках - все работало без проблем, поэтому так и писал.
     
    Dantis
    Попробуй тогда поставить службам Касперыча и Аутпоста в настройках запуск вручную. Это можно сделать командой:
    sc config имя_службы start= demand
    После этого перезагружай комп и эти службы мешать больше не будут. Перезагрузить можно командой:
    shutdown -r -t 0
    Обратно вернуть автозапуск служб можно так:
    sc config имя_службы start= auto
     
    P.S. Файлы .msc и есть консоль, она и будет запускаться, чего хотел, то и получаешь)

    Всего записей: 257 | Зарегистр. 09-05-2007 | Отправлено: 21:05 04-05-2008 | Исправлено: angeltwo, 21:14 04-05-2008
    Dantis

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

    Цитата:
    P.S. Файлы .msc и есть консоль, она и будет запускаться, чего хотел, то и получаешь)

     
     
    гы...  один из вариантов работает . запускается сама прога, НО Запускается она не всегда =(.

    Всего записей: 26 | Зарегистр. 25-03-2008 | Отправлено: 21:19 04-05-2008
    JI063uk



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

    Цитата:
    angeltwo

    Не получяеться с этой командой psexec...
    Нашел кое что - но запускаеться только на моем компе а по сети нет
    т.е. прибиваеться везде а запускаеться токо у меня
     
    @echo off
    setlocal
    for /f "tokens=*" %%i in (list.txt) do (
    taskkill /s "\\%%i" /im 1.exe /f
    )
    tasklist | find /i "1.exe" || start "" "C:\111\1.exe"
    PAUSE
     
    Help
     

    Всего записей: 55 | Зарегистр. 24-01-2008 | Отправлено: 21:37 04-05-2008 | Исправлено: JI063uk, 21:43 04-05-2008
    Elroir



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

    Цитата:
    Команда №1 в контекстном меню, например "Spaces to Underscores"  
    --->меняет в имени пробелы на подчеркивания для текущего файла или каталога, причем имена всех содержащихся в текущем каталоге файлов и подкаталогов НЕ изменяются  
     
    Команда №2 в контекстном меню, например "All Sub Spaces to Underscores"  
    --->меняет пробелы на подчеркивания для текущего файла, а в случае каталога, то для него и всех содержащихся в нем файлов и каталогов

     
    Вроде так  
    Батник replace_spaces.cmd:

    Код:
     
    @echo off
    setlocal
    if not "%~2"=="/s" goto file_rename
    pushd "%~1" >nul 2>&1 || goto file_rename
    popd
    call :process_files %1
    call :process_dirs %1 "%~2"
    :file_rename
    pushd "%~dp1"
    call :do_rename %1
    popd
    goto :EOF
    :process_files
    pushd %1
    for %%a in (*.*) do call :do_rename "%%~fa"
    popd
    goto :EOF
    :process_dirs
    pushd %1
    for /d %%a in (*.*) do call :do_rename "%%~fa"
    for /d %%a in (*.*) do call "%~f0" "%%~fa" "%~2"
    popd
    :do_rename
    set "name=%~nx1"
    set "name=%name: =_%"
    ren "%~nx1" "%name%"
     

     
    .reg файл:

    Код:
     
    Windows Registry Editor Version 5.00
     
    [HKEY_CLASSES_ROOT\*\shell\Spaces to Underscores]
     
    [HKEY_CLASSES_ROOT\*\shell\Spaces to Underscores\command]
    @="replace_spaces.cmd \"%L\""
     
    [HKEY_CLASSES_ROOT\Folder\shell\Spaces to Underscores]
     
    [HKEY_CLASSES_ROOT\Folder\shell\Spaces to Underscores\command]
    @="replace_spaces.cmd \"%L\""
     
    [HKEY_CLASSES_ROOT\Folder\shell\All Sub Spaces to Underscores]
     
    [HKEY_CLASSES_ROOT\Folder\shell\All Sub Spaces to Underscores]
    @="replace_spaces.cmd \"%L\" \"/s\""
     
     


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 22:31 04-05-2008
    Cheerful_a_bear



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ЛЮДИ, подскажите как удалять из папки файлы старше определенного количества дней...

    Всего записей: 103 | Зарегистр. 30-04-2008 | Отправлено: 23:41 04-05-2008
    Astron



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

    Цитата:
    Windows Registry Editor Version 5.00  
     
    [HKEY_CLASSES_ROOT\*\shell\Spaces to Underscores]  
     
    [HKEY_CLASSES_ROOT\*\shell\Spaces to Underscores\command]  
    @="replace_spaces.cmd \"%L\""  
     
    [HKEY_CLASSES_ROOT\Folder\shell\Spaces to Underscores]  
     
    [HKEY_CLASSES_ROOT\Folder\shell\Spaces to Underscores\command]  
    @="replace_spaces.cmd \"%L\""  
     
    [HKEY_CLASSES_ROOT\Folder\shell\All Sub Spaces to Underscores]  
     
    [HKEY_CLASSES_ROOT\Folder\shell\All Sub Spaces to Underscores\command]  
    @="replace_spaces.cmd \"%L\" \"/s\""

    Всего записей: 790 | Зарегистр. 28-12-2003 | Отправлено: 00:48 05-05-2008 | Исправлено: Astron, 01:34 05-05-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Astron
    Самое интересное, что у меня в редакторе reg файл написан правильно.
    Как я копировал...


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 01:01 05-05-2008
    Astron



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    У меня не выполняется условие - всегда переименовывается всё, что есть в каталоге...

    Всего записей: 790 | Зарегистр. 28-12-2003 | Отправлено: 01:34 05-05-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Astron
    Что-то у нас с тобой с первого раза ничего не получается
    У меня все работает как часы.
    После строчки "setlocal", добавь  

    Код:
     
    echo %%2 == %2
    pause
     
     
    и посмотри чему равен %2 в обоих случаях.

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 02:00 05-05-2008
    king_stiven

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

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 06:37 05-05-2008
    APir

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

    Цитата:
    rar.exe a -r -agdd-mm-yyyy -m5 -df -y c:\BACKUP\Архив\Архив_DOC_за_.rar c:\BackUP\DOC\  
    rar.exe a -r -agdd-mm-yyyy -m5 -df -y c:\BACKUP\Архив\Архив_XLS_за_.rar c:\BackUP\XLS\  
     
     
    Как сделать так, чтобы архивные файлы старше месяца автоматически удалялись, а на их место записывались новые?

     
    Есть идея.  
     
    "rar.exe a -r -agdd" и разрешить перезапись файлов.
     
    То есть убрать месяц и год из имени файлов, тогда они будут совпадать. Должно сработать.

    Всего записей: 49 | Зарегистр. 01-10-2005 | Отправлено: 08:42 05-05-2008
    bmax

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем добрый день!
    Не откажите в помощи, пожалуйста!
    как реализовать задаку:  
    Бежим по файлику от начала до конца в поисках следующего:
    FileName="имя файла" и вот если "имя файла" начинается с буквы b, тогда передаем переменной номер строки в которой было найдено совпадение. Бежим дальше в поисках следующего найденного FileName="имя файла", где "имя файла" начинается с буквы b - опять передаем номер строки переменной и т.д.  пока не будет достигнут конец файла. Как только достигнут конец файла сохраняем номер строки конца файла во внешний файл, чтобы в следующий раз приступить к поиску с этого места.
    Буду рад любой помощи!
    Спасибо.
     
     

    Всего записей: 32 | Зарегистр. 13-09-2006 | Отправлено: 14:57 05-05-2008
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, можно ли решить такую задачу средствами bat файла:
    1 Нужно отследить завершение процесса установки приложения запущенного из bat файла.
    2 В ходе установки приложение запускает "дочерний" процесс и закрывает основной, тем самым возвращая управление bat файлу.
    3 Процесс установки продолжается и его можно видеть в "Диспетчере задач" по запущенным процессам (например, mscorsvw.exe), но дело усложняется тем, что процесс с этим именем не один!!!
    4 Когда процесс с указанным именем остается один в диспетчере - это и будет завершение установки.
     
    Как это можно реализовать?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 15:04 05-05-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bmax
     
    Вот вроде подробно написал, но не понятно. Нужно узнать номер строки где в последний раз встречается:

    Код:
     
    FileName="b*"
     

    Правильно?
     

    Код:
     
    @echo off
    setlocal
    for /f "tokens=1 delims=:" %%i in ('findstr /n "FileName=.b.*" 1.txt') do set line=%%i
    echo %line%
     

     
    С учетом кавычек вокруг имя_файла

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:22 05-05-2008
    rupinskiy

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые сведущие - направили меня с других топиков к вам за советом - помогите пожалуйста решить 2 проблемки:
     
    1.) есть строка типа - %%текст1;; а есть другая ???текст2)) - надо текст1 поменять на текст 2, где "% ; ? )" - произвольные символы, которые будут (могут) выступать критериями поиска
     
    2.) есть файлы (тисяч 15) у всех такое название построено по такому формату - ХХХХ(другая лабуда), где ХХХХ - 4-ре цифры - надо сделать чтобы что либо обработало этот массив и пораспихивало все файлы по следующему правилу - создало папку с именем ХХХХ (те же 4 цифры) и закинуло все файлы которые начинаютса на них и так со всеми возможными вариантами этих 4-рез цифр

    Всего записей: 463 | Зарегистр. 16-07-2005 | Отправлено: 00:38 06-05-2008
    Astron



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    а) =
    б) ="%s"
    в общем, вроде заработало!!!

    Всего записей: 790 | Зарегистр. 28-12-2003 | Отправлено: 01:32 06-05-2008
    bmax

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM, спасибо огромное!
    Каждый раз при успешном нахождении FileName="b*" передает номер строки в которой нашла совпадение (который(номер строки) я в дальнейшем использую для образования имени файла), ищет дальше и если находит - выполняет то же самое, и бежит дальше, пока не будет достигнут конец файла. Как только достигнут конец файла передаем номер  строки КОНЦА ФАЙЛА во внешний файл, чтобы в следующий раз начинать поиск FileName="b*" не с самого начала, а с того места где закончили в прошлый раз, т к. файл постоянно дописывается. Как это реализовать?
     
    Еще раз спасибо за помощь!

    Всего записей: 32 | Зарегистр. 13-09-2006 | Отправлено: 09:23 06-05-2008
    king_stiven

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

    Цитата:
    2.) есть файлы (тисяч 15) у всех такое название построено по такому формату - ХХХХ(другая лабуда), где ХХХХ - 4-ре цифры - надо сделать чтобы что либо обработало этот массив  


    Код:
    @echo off
    cd /d D:\2
    for %%c in (*.*) do call :rty "%%c"
    goto :eof
    :rty
    set file=%~1
    set "file=%file:~0,4%"
    if not exist "%file%\" md "%file%"
    MOVE %1 "%file%"

    В папке D:\2 лежат обрабатываемые файлы, если проблема с кириллицей вставь во вторую строку chcp 1251 > nul
    Также смотри ключи к командам md MOVE

    Всего записей: 2167 | Зарегистр. 17-07-2006 | Отправлено: 09:31 06-05-2008 | Исправлено: king_stiven, 09:40 06-05-2008
    01MDM



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

    Код:
     
    @echo off
    setlocal
     
    :: Находим строки "FileName=...." и их номера
    for /f "tokens=1,3* delims=:=" %%i in ('findstr /n "FileName=.b.*" 1.txt') do (
        set line=%%i && call:somejob %%j %%k
    )
     
    :: Считаем дальше, от последнего найденного, до конца файла
    for /f "skip=%line%" %%i in (1.txt) do set /a cnt+=1
    set /a cnt+=line
     
    :: Всего строк в файле, без учета пустых в нижней части файла
    :: Но можно исправить, если принципиально.  
    echo %cnt% > mark.txt
    goto:eof
     
    :somejob
    :: Здесь обрабатываешь названия файлов из найденных строк  
    echo file name is %~1 %~2 line:%line%
     
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 10:07 06-05-2008
    Joolz

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть ли способ скрыть вывод команды taskkill?
    Конструкция типа:

    Код:
    taskkill /F /IM "program.exe" /T>null

    не работает.

    Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 10:09 06-05-2008
       

    Страницы: 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-файлах 5
    vu1tur (04-11-2008 23:07): Задачи на bat-файлах 6


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru