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

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

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

    Цитата:
    Код:@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

     
    Вы ГЕНИЙ !!! Такой короткий алгоритм и ТАКОЙ еффективный. Браво !!!
     
    Может поможете с первым заданием, большая просьба ...

    Всего записей: 466 | Зарегистр. 16-07-2005 | Отправлено: 01:15 07-05-2008
    JI063uk



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

     
    Подскажите какой командой можно запустить программу на удаленном компе, очень надо
     

    Всего записей: 55 | Зарегистр. 24-01-2008 | Отправлено: 08:48 07-05-2008 | Исправлено: JI063uk, 08:49 07-05-2008
    bmax

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

    Цитата:
     
    :: Находим строки "FileName=...." и их номера  
    set skip=0  
    if exist last_pos.txt set /p skip=<last_pos.txt  
     

    Такая конструкция не устроила почему - то при повторном выполнении ругалась на непредвиденное появление чего-то вроде    ."  
    Вышел из положения след. образом

    Цитата:
     
    set /p sk=<last_pos.txt  
    erase last_pos.txt
     

    да и удобнее мне так не приходится файл чистить.  
     

    Цитата:
     
    ... me=.b.*"') do (  
    set /a line=%%i+skip && call:copy...
     

     
    Спасибо это тоже учел, однако в другом месте и через дополнительную переменную, сегодня наверное переделаю(в этом месте почему-то не догадался вставить )
    Еще раз огромное спасибо!

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Прошу прощения за повтор вопроса, но если и сейчас не ответят, почти поверю, что задача нерешаема... Есть каталог, в нем каждый день создаются файлы. Мне в начале наступившего дня, скажем в 00:05 необходимо создать в каталоге папку с именем равным дате прошедшего дня, и переместить в нее все файлы в исходном каталоге, у которых дата создания соответствует дате прошедшего дня.  
    Заранее спасибо!

    Всего записей: 613 | Зарегистр. 04-11-2005 | Отправлено: 10:25 07-05-2008
    king_stiven

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

    а там "Использование даты на день раньше чем сегодня (используя VBScript) [?] "
     
     
    создать md
    переместить MOVE

    Цитата:
    но если и сейчас не ответят, почти поверю, что задача нерешаема...  

    Значит просто все заняты, сам сделай некоторые усилия.

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 10:41 07-05-2008 | Исправлено: king_stiven, 10:45 07-05-2008
    bmax

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как сделать чтобы номер строки конца файла сохранялся в любом случае, т.е. не только в случае нахождения искомой последовательности символов?
     

    Цитата:
     
    :: Находим строки "FileName=...." и их номера
    set /p sk=<last_pos.txt  
    set /a skip=%sk%-1
    erase last_pos.txt
    for /f "tokens=1,3* delims=:=" %%i in ('more +%skip% d:\Teleport\files\acp.rec ^| findstr /n "FileName=.b.* FileName=.a.*"') do (
    set /a "line=%%cnt+%skip%" && call:copy)
     
    :: Считаем дальше, от последнего найденного, до конца файла
    for /f %%i in ("more+%line% d:\Teleport\files\acp.rec") do set /a cnt+=1
    set /a cnt+=line
     
    ::Запоминаем конец файла
    echo %cnt% >> last_pos.txt
    goto:eof
     
    ::Обрабатываем найденные номера строк
    :copy
    FOR /f "tok .............
     

    Всего записей: 32 | Зарегистр. 13-09-2006 | Отправлено: 12:02 07-05-2008 | Исправлено: bmax, 12:57 07-05-2008
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    добрый день
     
    подскажите пожалуйста как можно запустить everest на машине пользователя чтобы сделать отчет с именем фала его %username%
     
    psexec \\COMP -u domain\inst_agt -p 123 \\serv\everest\start.cmd
     
    start.cmd
    everest.exe /R \\serv\everest\%username% /CSV /SUM /DELAY 10  
     
    поскольку если запустить так psexec \\COMP -u domain\inst_agt -p 123 cmd
    то USERNAME=inst_agt  
     
    если так psexec \\COMP -u domain\inst_agt -p 123 -s cmd
    то USERNAME нет вобще
     
    спасибо

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 15:09 07-05-2008 | Исправлено: JohnRD, 15:10 07-05-2008
    01MDM



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

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

     
    ЗЫ. На форум попасть становится все сложнее (ошибки 504 и 502)

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 16:00 07-05-2008 | Исправлено: 01MDM, 16:08 07-05-2008
    bmax

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

    Цитата:
     
    for /f %%i in ('more +%skip% 1.txt') do set /a cnt+=1  
    set /a cnt+=%skip%
     

     
    Эта поправка избавила меня от проблемы с сохранением номера строки в случае если совпадений не было найдено (у меня было line, правда и с line все работало но сделал через такую ж..., что страшно себе представить)

    Всего записей: 32 | Зарегистр. 13-09-2006 | Отправлено: 17:30 07-05-2008
    Kostya83

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый вечер!
     
    как сделать чтобы в батнике выполнялась только та строка которая содержит в себе имя компьютера на котором этот батник запущен?  
     
    содержание батника:  
    reg add "\\comp1\HKEY_LOCAL_MACHINE\SOFTWARE" /v test1 /t REG_SZ /d vvv1
    reg add "\\comp2\HKEY_LOCAL_MACHINE\SOFTWARE" /v test2 /t REG_SZ /d vvv2
    reg add "\\comp3\HKEY_LOCAL_MACHINE\SOFTWARE" /v test3 /t REG_SZ /d vvv3
     
    Этот батник будет запускаться на компьютерах comp1, comp2, comp3, нужно чтобы на каждом компьютере выполнялась только та строчка которая содержит имя компьютера.

    Всего записей: 1 | Зарегистр. 29-12-2007 | Отправлено: 18:51 07-05-2008
    DazZzle

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пожалуйста ответте возможно ли изменить дату изменения файла через bat файл, если да, то как!! Заранее спасибо

    Всего записей: 2 | Зарегистр. 07-05-2008 | Отправлено: 19:03 07-05-2008
    king_stiven

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

    Код:
    @echo off
    set way=D:\2
    echo WScript.Quit (DateDiff("d", CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments.Item(0)).DateCreated, Now))>timediff.vbs
    ECHO wscript.echo date-1>tmp.vbs
    FOR /F %%A IN ('cscript tmp.vbs //Nologo') DO SET "YESTERDAY=%%A"
    for %%a in ("%way%\*.*") do (
        set "file=%%a"
        call :ata
    )
    goto :eof
    :ata
    cscript timediff.vbs "%file%" > nul
    if "%errorlevel%"=="1" (
        if not exist "%way%\%YESTERDAY%\" md "%way%\%YESTERDAY%"
        MOVE "%file%" "%way%\%YESTERDAY%"
    )

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

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 19:30 07-05-2008 | Исправлено: king_stiven, 19:33 07-05-2008
    igor_andreev

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

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 03:13 08-05-2008
    zhuchella

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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DazZzle
    NirCmd умеет менять время создания/модификации файла (nircmdc setfiletime)
    zhuchella
    Cnic.exe
    Расспакуй.  
     
    Синтаксис простой:
    cnic "название_соединения" -d
    cnic "название_соединения" -c
    cnic /?
     

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    king_stiven и  
    igor_andreev!
    Большое спасибо, ребята!  
     

    Всего записей: 613 | Зарегистр. 04-11-2005 | Отправлено: 10:42 08-05-2008
    zhuchella

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

    Всего записей: 5467 | Зарегистр. 15-07-2003 | Отправлено: 11:26 08-05-2008
    Vlamo

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые знатоки командной строки!!!
    Помогите решить такую задачку:
     
    Имеется команда в батнике:

    Код:
    ftp -n -s:hostconnect.txt 2>&1 1>nul

     
    и есть файл hostconnect.txt следующего содержания:

    Код:
    open 192.168.0.27
    user user2 passw2
    binary
    prompt
    get /var/etc/users.cnf d:\bak_dir\users_old.cnf
    put d:\tmp_dir\users_new.cnf /var/etc/users.cnf
    quit

     
    Вопрос: возможно ли каким-то образом узнать
      1) произошло ли соединение
      2) успешно ли закачался файл users_new.cnf

    Всего записей: 4 | Зарегистр. 22-01-2006 | Отправлено: 15:35 08-05-2008
    GreaseOD

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто-нибудь пробовал организовать печать файлов через cmd?
    Нужно напечатать test.xls через cmd, желательно не сторонними дополнительными программами требующие установке
    Или если есть скинте пжл ссылку!

    Всего записей: 30 | Зарегистр. 10-08-2006 | Отправлено: 15:35 08-05-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Vlamo
    Не в nul вывод, а в файл и анализируй файл
    GreaseOD
    В гугле classExec набери
     

    Всего записей: 1704 | Зарегистр. 08-12-2004 | Отправлено: 15:54 08-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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru