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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev

    Цитата:
    У меня на английской Windows там тоже 419 стоит

     
    Странно, считал что если русская локаль, то и операционка русская. Может у тебя с MUI?
     
    Вот посмотрел отличную от:
    http://www.pcreview.co.uk/forums/thread-1580899.php
     
    А у американцев 409:
    http://technet2.microsoft.com/windowsserver/en/library/f72edc1a-83a7-4da2-81ff-ae0b656886e51033.mspx?mfr=true
     

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 13:22 15-07-2008 | Исправлено: 01MDM, 13:27 15-07-2008
    igor_andreev

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

    Цитата:
    Может у тебя с MUI?  

    Без MUI. Просто все в региональных настройках установлено для корректного отображения русского текста повезде, язык для неюникодных программ и т.п.

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 14:23 15-07-2008 | Исправлено: igor_andreev, 14:29 15-07-2008
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
     
    Наверное ты прав. А что показывает:

    Код:
     
    wmic os get oslanguage /value
     

     
    На русской 1049
     
    Этот способ не универсальный (т.к не везде есть wmic), просто интересно.

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:42 15-07-2008 | Исправлено: 01MDM, 14:47 15-07-2008
    JohnRD

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

    Код:
    for /f "tokens=1" %%a in (list1.csv) do ping %%a  
    если не пингуется то echo >result.txt
    если пингуется то psexec \\%%a 1.cmd

     
    list1.svc список имен машин из ад, не ip!
     
     
    может как нибудь так, поправьте пожалуйста. не пишет в файл..
     

    Код:
    for /f "tokens=1" %%a in (list1.csv) do ping %%a | find "TTL=" > nul  
    if errorlevel 1 echo > result.txt
    else psexec \\%%a 1.cmd  и тоже бы записать в result1.txt  
     
     

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

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

    Цитата:
    На русской 1049

    На английской 1033
     
    JohnRD
    Или пинг вынеси в отдельную метку

    Код:

    @echo off
     
    for /f "tokens=1" %%a in (list1.csv) do call :my_label %%a
    goto :eof
     
    :my_label
    ping -n 1 %1 | find "TTL=" > nul
    if not errorlevel 1 (echo %1 ok) else echo %1 error  
    goto :eof

    или как-нить так

    Код:

    @echo off
     
    for /f "tokens=1" %%a in (list1.csv) do (ping -n 1 %%a | find "TTL=" > nul && echo %%a ok || echo %%a error)  

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 15:36 15-07-2008 | Исправлено: igor_andreev, 15:42 15-07-2008
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    спасибо огромадное
     
    гляньте так похоже на правду? только что накорябал
     

    Код:
    for /f "tokens=1" %%a in (list1.csv) do (ping -n 1 %%a | find "TTL=" > nul  
    if errorlevel 1 (
    echo %%a >> result.txt
    ) else (psexec \\%%a 1.cmd
    )
    )


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



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

    Цитата:
    На английской 1033

     
    С папками тоже не до конца универсально, можно через netsh

    Код:
     
    netsh diag show os /v | findstr /c:"OSLanguage = 1049" 1>nul && echo rus || echo unknown
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 15:51 15-07-2008 | Исправлено: 01MDM, 15:55 15-07-2008
    igor_andreev

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

    Цитата:
    так похоже на правду?

    Не очень Яж написал, хочешь использовать if errorlevel - выноси пинг в отдельную метку

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 15:53 15-07-2008
    JohnRD

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

    Код:
    PsExec v1.94 - Execute processes remotely
    Copyright (C) 2001-2008 Mark Russinovich
    Sysinternals - www.sysinternals.com
     
                                                                                  cmd on balykov-aa...
    \\domain.local\Software\1.cmd started on balykov-aa with process ID 2700.

    и такой  

    Код:
    PsExec v1.94 - Execute processes remotely
    Copyright (C) 2001-2008 Mark Russinovich
    Sysinternals - www.sysinternals.com
     
    Couldn't access radionov-e:
    The system cannot find the file specified.

     

    Код:
    @echo off
     
    for /f "tokens=1" %%a in (list1.csv) do call :my_label %%a
    psexec \\%%a 1.cmd тут что нить найти, если не выполнилось то в лог с именами машин
    goto :eof
     
    :my_label
    ping -n 1 %1 | find "TTL=" > nul
    if not errorlevel 1 (echo %1 ok) else echo %1 >> no_ping.txt  
    goto :eof  

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 16:02 15-07-2008 | Исправлено: JohnRD, 16:19 15-07-2008
    igor_andreev

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

    Цитата:
    как бы еще обработать на какой машине не выполнился psexec  

    Как обычно, по коду возврата http://forum.sysinternals.com/forum_posts.asp?TID=233

    Код:

    for /f "tokens=1" %%a in (list1.csv) do call :my_label %%a  
    goto :eof  
       
    :my_label  
    ping -n 1 %1 | find "TTL=" > nul  
    if errorlevel 1 (
      echo %1 ping error >> result.txt
    ) else (
       psexec \\%1 ... || echo %1 psexec error >> result.txt  
    )
    goto :eof

     

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 16:43 15-07-2008 | Исправлено: igor_andreev, 16:49 15-07-2008
    tolyn77



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

    Всего записей: 1495 | Зарегистр. 07-09-2004 | Отправлено: 17:05 15-07-2008
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
     
     psexec \\%1 ... || echo %1 psexec error >> result.txt  
     
    половину правды, половину нет пишет
     
    sergeev-ss psexec error    тут должен отработать
    balykov-ii psexec error     тут должен отработать
    craft psexec error           тут не должен, правильно
     
    тоесть он сделал вид что запустил на всех машинах те которые пингуются

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JohnRD
    Я ссылку дал на forum.sysinternals почитай там про параметр -d, попробуй с ним и без него(If you don't use the -d switch, the no-error return code will be 0. If you use -d it will be the process id), по всякому, можно вместо || еще один if errorlevel попробовать.

    Код:

    if errorlevel 1 (  
      echo %1 ping error >> result.txt  
    ) else (  
      psexec \\%1 ...
      if errorlevel 1 echo %1 psexec error >> result.txt
      rem или if not %errorlevel%/ equ 0/ по-всякому короче  
    )

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 17:22 15-07-2008 | Исправлено: igor_andreev, 17:28 15-07-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возникла такая проблема. Нужно изменить несколько байт в bin файле, не используя сторонних утилит. Debug.exe прекрасно справляется с файлами < 64 Kb , далее возникают проблемы.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 17:37 15-07-2008
    JohnRD

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
     
    супер, сработало
     
    я сам допустил ошибку вместо psexec \\%1  писал упорно psexec \\%a%
     
    спасибо за помощь

    Всего записей: 205 | Зарегистр. 29-08-2004 | Отправлено: 17:46 15-07-2008
    igor_andreev

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

    Цитата:
    Debug.exe прекрасно справляется с файлами < 64 Kb , далее возникают проблемы.

    Ну и покроши этот файл на куски по 64Кб, измени нужный и опять собери Если прям так надо стандартными ср-ми

    Код:

    @echo off
    echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>split.com
    echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>split.com
    echo @}{juN?_p~KL?plrQwHDo{kA{wqLsvxsjokO@IlBjjD~slH[mHCGjA_o}s>>split.com
    echo yGa]JA`LAK}gqtA]E?]}?AuxAOEEdKoA]?\E}B}?AGxA\?ETupA\E?E}oK>>split.com
    echo ?A[_A[}?DuxC[EEBsoA_Hp{oAUyAq`LRablGuJAGsA__Zp~o??xaAcyAq`>>split.com
    echo LRsPWg]J?HyAa_LAcoIq`C??=_MDtPj[t=rBM]hkoToms@?oo???O?0xxx>>split.com
     
    split 2 <твой_файл
    del split.com

    Собрать обратно @copy /b SPLIT.* твой_файл
     
    Добавлено:
    Хотя не, файл 65536 байт debug уже не возьмет. Порежь на куски по 32Кб(32768 байт)
    split 1 <твой_файл

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 18:01 15-07-2008
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igor_andreev
    Задача именно в том, что не использовать сторонние утилиты. split.com - сторонняя.
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 19:29 15-07-2008
    igor_andreev

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Вам шашечки или ехать? Любой, написанный тобой батник или скрипт - сторонний. Не было его на диске сразу после установки Windows.
     
    Добавлено:
    Теоретически можно попробовать vbs c ADODB.Stream, вроде я даже примеры где-то по инету видел. Но сам не пробовал. Как бинарный файл в текстовой перевести и обратно на vbs знаю, а вот менять значения не пробовал. И скрипт будет существенно обьемнее в плане количества строчек кода, чем шесть строчек батника, создающие split.com

    Всего записей: 1667 | Зарегистр. 08-12-2004 | Отправлено: 21:28 15-07-2008
    NIKZZZZ



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

    Цитата:
    Теоретически можно попробовать vbs c ADODB.Stream, вроде я даже примеры где-то по инету видел.

    wsh - без проблем , а если его попросту нет? Vbs Js скрипты требуют наличия их поддержки.
     
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:11 15-07-2008 | Исправлено: NIKZZZZ, 22:15 15-07-2008
    pumpit

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужна помощь. Есть ли возможность при появлении "Are you sure <Y/N>" в cmd.exe нажимать "Y" или "N" автоматически? В гугле не смог найти ничего подобного.

    Всего записей: 5 | Зарегистр. 08-07-2008 | Отправлено: 02:00 16-07-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