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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JohnRD
     
    Потому что у тебя идет процесс и при каждой итерации первого цикла надо полученную переменную сразу обрабатывать или она возвратит только последнее  полученное значение
     
    В моем варианте прoделывай все дальнейшие операции в метке :inn, но если ты там собираешься обрабатывать %%p, то ее надо туда передать, как параметр
     

    Код:
     
    @echo off
    for %%p in (E:\install\GetMail\22\*.xml) do (
         for /f "tokens=2 delims=_" %%i in ("%%p") do call:inn %%i %%p
    )
    goto:eof
     
    :inn
    for /f "tokens=1,2 delims=; " %%b in (1.csv) do if %%b==%1 set login=%%c
    set passw=%login%
    echo %login%
    echo %passw%
    echo %2
     

     
    Это просто навскидку. Не проверял, и могу ошибиться в этом моменте 'call:inn %%i %%p'.
     

    Цитата:
    но отдает 11 раз логин

    set passw=%login%
    echo %login%
    echo %passw%
     
    Он отдает и %login% и %раssw% просто они одного значения 'set passw=%login%'

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

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

    Код:
    @Echo off  
     
    set t=%time: =0%  
    set s=%t:,=%  
    set s1=%s::=%  
    set s2=%s1::=%  
    set d=KONscr%s2%  
     
    set d1=%date:~-4%%date:~3,2%%date:~0,2%  
    set l=E:\install\GetMail\log\%d1%_%s1%.log  
     
    set passw=%login%
     
    echo user>%d%  
    echo %login%>>%d%
    echo %passw%>>%d%  
    for %%p in (E:\install\GetMail\22\*.xml) do (
        for /f "tokens=2 delims=_" %%i in ("%%p") do (
           for /f "tokens=1,2 delims=; " %%b in (1.csv) do if "%%b"=="%%i" set login=%%c
        )
    ) | echo put %%p>>%d%
    echo bye>>%d%  
     
    ftp -n -s:%d% 192.168.60.30>>%l%  
     
    #del %d%  
    goto end  
     
    :end

    то получаем файл  
    KONscr14525794

    Код:
    user            
    ECHO is off.      тут нужен логин
    ECHO is off.      тут пароль
    put E:\install\GetMail\22\80020_710732001T_20080526_580.xml          
    put E:\install\GetMail\22\80020_710732001T_20080527_581.xml          
    put E:\install\GetMail\22\80020_710732001T_20080528_582.xml          
    put E:\install\GetMail\22\80020_710732001T_20080529_583.xml          
    put E:\install\GetMail\22\80020_710732001T_20080530_584.xml          
    put E:\install\GetMail\22\80020_710732001T_20080531_585.xml          
    put E:\install\GetMail\22\80020_9123456780_20080427_990.xml          
    put E:\install\GetMail\22\80020_9123456780_20080502_710.xml          
    put E:\install\GetMail\22\80020_9123456780_20080503_461.xml          
    put E:\install\GetMail\22\80020_9123456780_20080503_494.xml          
    put E:\install\GetMail\22\80020_9123456780_20080503_589.xml          
    put E:\install\GetMail\22\80020_9123456780_20080504_277.xml          
    put E:\install\GetMail\22\80020_9123456780_20080504_377.xml          
    put E:\install\GetMail\22\80020_9123456780_20080504_431.xml          
    put E:\install\GetMail\22\80020_9123456780_20080504_466.xml          
    put E:\install\GetMail\22\80020_9123456780_20080506_2137.xml          
    put E:\install\GetMail\22\80020_9123456780_20080506_2399.xml          
    bye

    тут уже отсутствуют login pass - мы их позже вычислили и файлы с разными ИНН собрались в папку ftp одного пользователя  
     
    как сделать чтобы файлы с уникальной частью в имени, собирались для отправки именно в ftp папку этого пользователя с его логином и паролем? другие в другую
    и как определить login passw чтобы вписать их выше?
     
     
    Добавлено:
    01MDM
     

    Код:
    @echo off
     
    set t=%time: =0%  
    set s=%t:,=%  
    set s1=%s::=%  
    set s2=%s1::=%  
    set d=KONscr%s2%  
     
    set d1=%date:~-4%%date:~3,2%%date:~0,2%  
    set l=E:\install\GetMail\log\%d1%_%s1%.log  
     
    for %%p in (E:\install\GetMail\22\*.xml) do (
         for /f "tokens=2 delims=_" %%i in ("%%p") do call:inn %%i %%p
    )
    goto:eof
     
    :inn
    for /f "tokens=1,2 delims=; " %%b in (1.csv) do if %%b==%1 set login=%%c
    set passw=%login%
    echo %login%
    echo %passw%
    echo %2
       
    echo user>%d%
    echo %login%>>%d%
    echo %passw%>>%d%
    echo put %2>>%d%
    echo bye>>%d%
     
    ftp -n -s:%d% 192.168.60.30>>%l%  
     
    #del %d%  
    goto end
     
    :end

     
    файл для конекта к фтп KONscr15240257 с одним файлом

    Код:
    user            
    blabla          
    blabla            
    put E:\install\GetMail\22\80020_9123456780_20080506_2399.xml            
    bye
               

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 15:18 05-06-2008 | Исправлено: JohnRD, 15:29 05-06-2008
    dSasha

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть PCI DVB карта для спутникового приёма, TT-Budget S2-3200. C ней, и не только с ней, нередко случаются обмороки. Приходится в Диспетчере устройств отключать, потом задействовать. Можно ли эти действия сделать с помощью bat-файла? Если можно, то как? С поиском я не справился, простите чайника со стажем, если уже отвечали на что-то похожее.
     
    Elroir
    Спасибо. Опять я не нашёл то, что прямо перед глазами

    Всего записей: 30 | Зарегистр. 15-06-2007 | Отправлено: 15:27 05-06-2008 | Исправлено: dSasha, 15:52 05-06-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dSasha
    В шапке, в разделе "Полезные утилиты", посмотри утилиту "devcon".

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

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



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

    Код:
     
    @echo off
     
    set t=%time: =0%  
    set s=%t:,=%  
    set s1=%s::=%  
    set s2=%s1::=%  
    set d=KONscr%s2%  
     
    set d1=%date:~-4%%date:~3,2%%date:~0,2%  
    set l=E:\install\GetMail\log\%d1%_%s1%.log  
     
    for %%p in (E:\install\GetMail\22\*.xml) do (
         for /f "tokens=2 delims=_" %%i in ("%%p") do call:inn %%i %%p
    )
    for %%i in (*.ftp) do (
        echo bye>>"%%i"
        rem ftp -n -s:%%i 192.168.60.30>>%l%
            rem del "%%i"
    )
     
    goto:eof
     
    :inn
    for /f "tokens=1,2 delims=; " %%b in (1.csv) do if %%b==%1 set login=%%c
    set passw=%login%
       
    if not exist "%d%%1.ftp" (
        echo user>"%d%%1.ftp"
        echo %login%>>"%d%%1.ftp"
        echo %passw%>>"%d%%1.ftp"
    )
    echo put %2>>"%d%%1.ftp"
     


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



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

     
    Здравствуйте подскажите плиз как можно сделать так чтобы батник при запуске не выскакивал на экране? Заранее спасибо.
     

    Всего записей: 55 | Зарегистр. 24-01-2008 | Отправлено: 18:49 05-06-2008
    01MDM



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

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



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

    Цитата:
    01MDM

     
     
    Это при помощи утилиты... а без них есть способ скрыть окно???
     

    Всего записей: 55 | Зарегистр. 24-01-2008 | Отправлено: 19:34 05-06-2008 | Исправлено: JI063uk, 19:35 05-06-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JI063uk
     
    *.vbs-решение, но не помню где.

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



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

    Цитата:
    01MDM

     
    А как работать с этой утилиткой cmdow.exe там все на англ.яз у меня с этим трудно перед чем ставить и с какими ключами подскжи плиз
     
    Например в таком батники где поставить cmdow.exe чтобы он запустился скрытно
     
    @echo off
    shutdown -s -t 00

    Всего записей: 55 | Зарегистр. 24-01-2008 | Отправлено: 20:14 05-06-2008
    Elroir



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

    Код:
     
    @echo off
    cmdow @ /HID
    shutdown -s -t 00
     


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

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

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    01MDM
     
    поидее должно работать, спасибо
    сам я уже запутался окончательно
     
    как можно убить те файлы которые были закачаны на фтп?
    и если файлов будет очень много 1000и сможет интересно?
     
    идея такая что эти xml будут приходить на почтовый ящик с разных регионов, сервер будет запускать этот батник, в начале батника  будет запускаться консольный почтовый клиент, который будет вытаскивать вложения (xml) и класть в папку разбора, далее эти xml должны уйти на FTP согласно 1.csv,
    вот я думаю если запуститься батник, начнет работать, а тут придет еще порция xml по почте, что будет?
     
    по поводу удаления отправленных
    я думаю может вначале xml стоит отбирать по инн, создавать временную папку с названием текущего времени, перекладывать туда, и от туда пулять на фтп, далее удалять всю временную папку? сложно это?
     
    или какая лучше логика действий чтобы не заклинило?
     

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 20:28 05-06-2008 | Исправлено: JohnRD, 20:51 05-06-2008
    JI063uk



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

    Цитата:
    @echo off  
    cmdow @ /HID  
    shutdown -s -t 00

     
     
    А чтобы вобще небыло черного окна можна так???

    Всего записей: 55 | Зарегистр. 24-01-2008 | Отправлено: 20:33 05-06-2008
    Elroir



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JI063uk
    Сделай ссылку на батник и в ней пропиши:

    Код:
     
    hstart /NOWINDOW batnik.cmd
     

    выделенное замени на свое.
    Или, действительно, запускай батник из VBS скрипта - там можно установить показывать или не показывать окно.

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

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



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

    Цитата:
    Elroir
     
    Цитата:
    01MDM

    СПАСИБО за помощь

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

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Elroir
    вопрос по поводу запуска батника из VBS скрипта
     
    есть почтовик hMailServer он не может запускать батники по созданным правилам, но может запускать VBS, я нашел на форуме сайта сервера, VBS для запуска cmd, но интересная штука получатся, если просто  запускаешь cmd  

    Код:
    postie -host:mail.john.org -user:info@john.org -pass:212121 -extract -rm

    он вытаскивает все вложения  которые были в одном письме, если же этот cmd запускается из под VBS, то сервер отрабатывает правило и вытаскивается только одно вложение, последнее по списку, хотя их там много.
    если же слать по 1му письму с 1им вложением, то все вытаскиваются.
     
    с чем такое может быть связано?
    скрипт
    "C:\Program Files\hMailServer\Events\EventHandlers.vbs"

    Код:
    '   Sub OnClientConnect(oClient)
    '   End Sub
     
       Sub OnAcceptMessage(oClient, oMessage)
    Set sh = CreateObject("WScript.Shell")
    Dim cmd, rc
    cmd = "cmd /c E:\install\GetMail\postie\1.cmd " & oMessage.Filename  
    rc = sh.Run( cmd , 0 , TRUE)
       End Sub
     
    '   Sub OnDeliveryStart(oMessage)
    '   End Sub
     
    '   Sub OnDeliverMessage(oMessage)
    '   End Sub
     
    '   Sub OnBackupFailed(sReason)
    '   End Sub
     
    '   Sub OnBackupCompleted()
    '   End Sub

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 21:06 05-06-2008 | Исправлено: JohnRD, 21:24 05-06-2008
    vsk94



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sorry если уже было , подскажите plz батник для следующей задачи:
    Есть две папки  в которых находятся файлы  типа  *.ax
    ;нужно найти  имеющие одинаковые названия  и удалить их в одной из папок в которой общее количество   *.ax  файлов больше.  
    Сравнение по md5 не нужно , просто  удалять по названию.
    И вообще возможно ли такое с помощью bat файла?  
    Спасибо.

    Всего записей: 862 | Зарегистр. 23-04-2007 | Отправлено: 22:13 05-06-2008
    Elroir



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

    Цитата:
    Есть две папки  в которых находятся файлы  типа  *.ax  
    ;нужно найти  имеющие одинаковые названия  и удалить их в одной из папок в которой общее количество   *.ax  файлов больше.

     

    Код:
     
    @echo off
    setlocal
    if "%~1"=="find" goto find_duplicates
    set "dir1=c:\temp\dir1"
    set "dir2=c:\temp\dir2"
    call :count_files count1 "%dir1%"
    call :count_files count2 "%dir2%"
    set "delete_from=%dir1%"
    if %count2% geq %count1% set "delete_from=%dir2%"
    for /f "tokens=*" %%a in ('%~0 find') do del /q "%delete_from%\%%~a"
    goto :EOF
     
    :count_files
    set "%1=0"
    for %%a in (%2\*.ax) do set /a "%1+=1"
    goto :EOF
     
    :find_duplicates
    for %%b in (%dir1%\*.ax) do if exist "%dir2%\%%~nxb" echo "%%~nxb"
     

    Выделенные директории замени на свои.
     
    Добавлено:
    JohnRD
    К сожалению, ничем помочь не могу. Я не вижу в скрипте проблем.
    Но лучше все-таки, если кто-нибудь, хорошо разбирающийся в VBS, посмотрит.

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

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



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Извеняюсь за офтоп, не смог найти подходящую тему.
     
    Пеосле зарожения и успешного лечения какимто вирусом (не запомнил каким)
    на компе перестали запускатся bat и cmd файлы.
    Т.е. по двойному клику ни чего не происходит
    Из фара батники запускаются нормально.
    Может ктонибудь знает как это лечить?
     
    ОС: XP SP2
     

    Всего записей: 9 | Зарегистр. 15-01-2004 | Отправлено: 08:16 06-06-2008
    Diman_tlt



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ подскажите пожалуста как выгруженную инфу в *.txt (> *.txt) распечатать на сетевой принтер (\\USER\hp LaserJet 1300 PCL 6) без пред просмотра?
    ос: xp sp2

    Всего записей: 6 | Зарегистр. 06-06-2008 | Отправлено: 10:11 06-06-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