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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хочу запустить файл из пакетного файла что я делаю не так  
    @echo off  
    Start C:\WINDOWS\Главное меню\Программы\Автозагрузка\VIKPOPUP.EXE  

    Всего записей: 22 | Зарегистр. 02-03-2007 | Отправлено: 16:38 12-06-2007
    Elroir



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

    Код:
    @echo off
    chcp 1251>nul
    Start "" "C:\WINDOWS\Главное меню\Программы\Автозагрузка\VIKPOPUP.EXE"


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 16:42 12-06-2007
    RRRomb

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо Elroir
    А можно ли сделать задержку на запуск файла
    Например до полной загрузки всех процессов на компе и после чего запускать файл
    И чем отличается
    mode con codepage select=1251 > nul
    от
    chcp 1251>nul  

    Всего записей: 22 | Зарегистр. 02-03-2007 | Отправлено: 16:51 12-06-2007 | Исправлено: RRRomb, 16:55 12-06-2007
    Maza Faka



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

    Цитата:
    А можно ли сделать задержку на запуск файла  
    Например до полной загрузки всех процессов на компе и после чего запускать файл

     
    Можно искать процессы в памяти, tasklist | find "program.exe", но это гиморно, если процессов много, а можно сделать задержку по времени, например при помощи этого кода получаем задержку 10 сек. ping -n 11 localhost>nul

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 17:09 12-06-2007
    RRRomb

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо Maza Faka  
    Тобиш перед запуском пингуем 11 раз и выигрываем время
    Пойду пробовать.
    Проблема была такая при автозагрузке
    "D:\Program Files\1Cv77\BIN\1Cv7.exe" config /Dd:\KhersonAvtotrans /NОлег /P12133 /@c:\1CBackup.ini
    конфигуратор не запускался поскольку 1с ломанная и нужно подождать пока загрузятся
    емулятор и прочая лабудень

    Всего записей: 22 | Зарегистр. 02-03-2007 | Отправлено: 17:18 12-06-2007
    Elroir



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

    Цитата:
    И чем отличается mode con codepage select=1251 > nul  
    от chcp 1251>nul

    Ничем - делают одно и тоже.


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 17:38 12-06-2007
    othy

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как запустить переменную, допустим получившую такое значение:
    %%J=arj32 x %%I -ht%out%\%data%\%%~nI -y
    Что-то типа:
    %%J >NUL
    Если возможно..

    Всего записей: 62 | Зарегистр. 28-11-2005 | Отправлено: 18:37 12-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    othy
    Если это происходит внутри цикла for, в котором ты и получил %%I и %%J, то именно так.
     
    Добавлено:
    Немножко поторопился.
    Надо сделать так:
    1. В начало батника добавить "setlocal enabledelayedexpansion"
    2. В цикле for -  
    set %%J=arj32 x %%I -ht%out%\%data%\%%~nI -y
    !%%J! >NUL  


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 18:44 12-06-2007
    twister2001

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте! Помогите пожалуйста решить такую задачу:
    Нужно сканировать определённый каталог, и если количество файлов в нём больше определённого количества, то удалить лишние (самые первые) из них.
     
    Пока сделал вот что:
     
    Количество файлов = 8, считаем файлы в каталоге:
     
    set /a kol = 0
    for %%f in (x:\folder\*.txt) do set /a kol+=1
    if %kol% LSS 8 exit
     
    а дальше, с удаление, застопорился. Пытался делать так:
     
    for %%f in (x:\folder\*.txt) do if %kol% GTR 8 (del %%f & set /a kol-=1) else exit
     
    но похоже, что конструкция if, в частности if %kol% расчитывается один раз, т.к. цикл отрабатывает для всех файлов в каталоге, и хотя после цикла %kol% равен 0, внутри цикла он всегда равен общему количеству файлов в каталоге
     
    Пожалуйста, пините в нужном направлении

    Всего записей: 2 | Зарегистр. 14-04-2007 | Отправлено: 01:20 13-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    twister2001
    1. Из шапки -  setlocal enabledelayedexpansion и переменные окружения
    2. set /?
    3. setlocal /?

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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 01:28 13-06-2007
    KapralBel



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

    Код:
    @Echo Off
    Set iCount=0
    For %%a in (F:\!\*.*) do Call :_DelFile %%a
    GoTo :EOF
     
    :_DelFile
    Set /a iCount+=1
    Echo %iCount%=%1
    If %iCount% GTR 8 Del %1 /q
    GoTo :EOF
     

     
    или см справку по команде Set (в сторону восклицательного знака вместо процента + setlocal)

    Всего записей: 11354 | Зарегистр. 16-02-2005 | Отправлено: 01:30 13-06-2007
    wolf0425



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

    Цитата:
    В цикле for -  
    set %%J=arj32 x %%I -ht%out%\%data%\%%~nI -y
    !%%J! >NUL  
    Э.... ты уверен, что пееменные вида %%j можно переопределять через set?
    в цикле для переменных цикла !! не нужны... вроде.
     

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 01:38 13-06-2007 | Исправлено: wolf0425, 01:38 13-06-2007
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KapralBel
    A что такое "(F:\!\*.*)" (я имею в виду восклицательный знак)?

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir наверное популярное имя каталога - "!" всегда первый...

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 01:40 13-06-2007
    KapralBel



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

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



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

    Цитата:
    Э.... ты уверен, что пееменные вида %%j можно переопределять через set?  
    в цикле для переменных цикла !! не нужны...  

    Я определяю переменную окружения, с именем, которое передается через второй токен в for-e, то есть %%J. И соответственно, чтобы прочитать эту переменную, мне нужны восклицательные знаки.
    Пример:

    Код:
     
    @echo off
    setlocal enabledelayedexpansion
    for /f "tokens=1,2" %%I in ("testValue testVar") do (
    set %%J=%%I
    echo The value of "%%J" is "!%%J!"
    )
     

    Вывод будет - The value of "testVar" is "testValue"
     
    Добавлено:
    KapralBel

    Цитата:
    что по контексту догадаться нельзя?

    Мда... не догадался я    
    (Чего-то меня заклинило и я стал искать глубокий смысл в этом знаке)


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

    Всего записей: 2631 | Зарегистр. 05-02-2003 | Отправлено: 01:45 13-06-2007 | Исправлено: Elroir, 01:51 13-06-2007
    euheny



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    И вроде бы ищу в справке и всё равно не нахожу , а так всё просто .

    Всего записей: 4021 | Зарегистр. 22-11-2006 | Отправлено: 03:43 13-06-2007
    vils007



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

    Цитата:
    @echo off
    setlocal enabledelayedexpansion
    for /f "tokens=*" %%a in ('dir /b /a:d /s c:\w ^| find /i /v "c:\w\log"') do (
    forfiles /p %%a /d -1 /c "cmd /c rd /q @file">nul 2>&1
    forfiles /p %%a /d -1 /c "cmd /c del /q /f @file">nul 2>&1)  

    что делает батник

    Цитата:
    в папке С:\w\log ни чего не удаляем никогда. А в С:\w удаляем всё что старше одного дня.  

     
    Проблема: на одной машине работает, а на некоторых не работает. Понять почему сам не смог.  

    Всего записей: 4 | Зарегистр. 31-05-2007 | Отправлено: 08:13 13-06-2007
    Maza Faka



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

    Цитата:
    Нужно сканировать определённый каталог, и если количество файлов в нём больше определённого количества, то удалить лишние

    Можно одной строкой:

    Код:
     
    @Echo off
    for /f "skip=8 tokens=*" %%a in ('dir /b /s /a:-d c:\temp') do del "%%a" /q /f
     

     
    Добавлено:
    vils007
    Утилита "forfiles.exe" есть на всех машинах?

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:35 13-06-2007
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
     
    спасибо
    подскажите что можно сделать если прога не успевает создать файл
    а for уже проверяет папку, можно ли задержать как-то ? вместо паузы
    @echo off
    setlocal  
    for /f "tokens=*" %%a in ('dir /b /a-d /od /tc e:\video\ 2^>nul') do set "old_last=%%a"  
    start CamRecorder.exe /r
    start /wait d:\RemoteControl.exe
    start /wait CamRecorder.exe /s/x
    pause
    for /f "tokens=*" %%a in ('dir /b /a-d /od /tc e:\video\ 2^>nul') do set "new_last=%%a"  
    if "%old_last%"=="%new_last%" (  
    set "new_last="  
    echo New file not found  
    ) else (echo %new_last%)
     

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 11:04 13-06-2007 | Исправлено: JohnRD, 11:12 13-06-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