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

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

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

vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 100

   

vu1tur



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

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

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





    http://forum.ru-board.com/topic.cgi?forum=62&topic=17154

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 23:07 04-11-2008 | Исправлено: vu1tur, 11:38 26-05-2009
    alexagf



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    greenfox
    А если нужны еще другие команды, типа копирования/удаления файлов,
    вывода сообщений, также в зависимости от ОС?
     
    Добавлено:
    vu1tur

    Цитата:
    if _%PROCESSOR_ARCHITEW6432% == _AMD64 (  
    echo "x64"  
    ) else (  
    echo "x86"  
    )  

    Тоже, однако, не то.
    Нужен выбор именно операционки XP/Vista/7 x86 vs XP/Vista/7 x64

    Всего записей: 1440 | Зарегистр. 23-09-2001 | Отправлено: 11:34 16-04-2009
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lanselotideo1111,  
    чего-то тебе 01MDM лишнего накрутил

    Код:
    for /f %%a in ('type input.txt ^| find /c /v "" ') do set /a str_cnt=%%a
    if %str_cnt% gtr 10 ( set /a start_cnt = %str_cnt% - 10 ) else (set start_cnt=0)
    more +%start_cnt% input.txt > result.txt  

     
    а вообще, конечно, рулят unixutils:
    tail -n 10 input.txt > result.txt
    на шибко длинных файлах можно и разницу в скорости заметить
     
     
    alexagf  

    Цитата:
    Нужен выбор именно операционки XP/Vista/7 x86 vs XP/Vista/7 x64

    а что на XP/Vista/7 x64 пишет встроенная команда ver ?

    Всего записей: 2929 | Зарегистр. 25-04-2007 | Отправлено: 11:46 16-04-2009 | Исправлено: wolf0425, 11:59 16-04-2009
    vu1tur



    Moderator-Saaber
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    alexagf

    Цитата:
    Тоже, однако, не то.
    Нужен выбор именно операционки XP/Vista/7 x86 vs XP/Vista/7 x64

    это он и есть. Вот кусок окружения с x86 системы, которая стоит на Xeon-е (поддерживающем x64).

    Код:
    PROCESSOR_ARCHITECTURE=x86
    PROCESSOR_IDENTIFIER=x86 Family 15 Model 4 Stepping 3, GenuineIntel
    PROCESSOR_LEVEL=15
    PROCESSOR_REVISION=0403


    ----------
    I am free of all prejudice. I hate everyone equally.

    Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:59 16-04-2009
    alexagf



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

    Цитата:
    а что на XP/Vista/7 x64 пишет встроенная команда ver ?

    На XP x64 (на виртуалке) вообще не реагирует.
    vu1tur

    Цитата:
    if _%PROCESSOR_ARCHITEW6432% == _AMD64 (  
    echo "x64"  
    ) else (  
    echo "x86"  
    )

    И на XP x64 и на х86 пишет "x86"

    Всего записей: 1440 | Зарегистр. 23-09-2001 | Отправлено: 12:09 16-04-2009
    vu1tur



    Moderator-Saaber
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    alexagf
    а покажи свое окружение с xp x64

    ----------
    I am free of all prejudice. I hate everyone equally.

    Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 12:23 16-04-2009
    alexagf



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

    Цитата:
    покажи свое окружение с xp x64

    Как это сделать?

    Всего записей: 1440 | Зарегистр. 23-09-2001 | Отправлено: 12:26 16-04-2009
    Joo1z



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    alexagf
    Введи set в командной строке. Без параметров.

    Всего записей: 123 | Зарегистр. 17-02-2009 | Отправлено: 12:35 16-04-2009
    alexagf



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Joo1z
    Не реагирует
     
    Добавлено:
    PROCESSOR_ARCHITECTURE=AMD64
    PROCESSOR_IDENTIFIER=EM64T Family 6 Model 26 Stepping 4, GenuineIntel
    PROCESSOR_LEVEL=6
    PROCESSOR_REVISION=1a04
     
    Добавлено:
    if %PROCESSOR_ARCHITECTURE% == AMD64 (  
    echo "x64"  
    ) else (  
    echo "x86"  
    )
     
    Вот так работает

    Всего записей: 1440 | Зарегистр. 23-09-2001 | Отправлено: 12:51 16-04-2009
    vu1tur



    Moderator-Saaber
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    alexagf
    да, действительно PROCESSOR_ARCHITECTURE, а не PROCESSOR_ARCHITEW6432. Мне printenv почему-то выдаёт отличные от set результаты…

    ----------
    I am free of all prejudice. I hate everyone equally.

    Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 14:10 16-04-2009
    greenfox



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

    Цитата:
    не знаю, чем этот вариант стандартен, но работать он не будет. Вот часть окружения с х64 системы:
    я взял этот код из дистрибутива от мс (шарапоинт 2007) + вы сами то посмотрите, в вашем случае переменная  PROCESSOR_ARCHITECTURE имеет одно значение - x86 и этим судя по всему всё сказано
    Вот вариант "снятый" на моей 2008 винде:

    Код:
    PROCESSOR_ARCHITECTURE=AMD64
    PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 23 Stepping 6, GenuineIntel
    PROCESSOR_LEVEL=6
    PROCESSOR_REVISION=1706

     
    А если уж совсем разжевать, то:
    1) PROCESSOR_ARCHITECTURE=x86 и PROCESSOR_ARCHITEW6432 не определен - 32-х разрядная система
    2) PROCESSOR_ARCHITECTURE=AMD64 и PROCESSOR_ARCHITEW6432 не определен - 64-х разрядная система на базе x64, программа запущена в родном режиме (64-х битном)
    3) PROCESSOR_ARCHITECTURE=IA64 и PROCESSOR_ARCHITEW6432 не определен - 64-х разрядная система на базе Itanium, программа запущена в родном режиме (64-х битном)
    4) PROCESSOR_ARCHITECTURE=x86 и PROCESSOR_ARCHITEW6432=AMD64 - 64-х разрядная система на базе x64, программа запущена в режиме x86
    4) PROCESSOR_ARCHITECTURE=x86 и PROCESSOR_ARCHITEW6432=IA64 - 64-х разрядная система на базе Itanium, программа запущена в режиме эмуляции x86
     
    Ну и совсем простой пример алгоритма только для x64 (причем гарантированно рабочий, самой Microsoft):

    Код:
    IF ((PROCESSOR_ARCHITECTURE == AMD64) OR
           (PROCESSOR_ARCHITEW6432 == AMD64)) THEN
           // 64-х битная ОС
        ELSE
           // 32-х битная ОС
        END IF

    Как интерпретировать значение переменных окружения надо разжевывать?

    ----------
    Три вещи вечны: смерть, налоги и потеря данных...

    Всего записей: 4139 | Зарегистр. 29-07-2003 | Отправлено: 16:05 16-04-2009
    ZeroCrash



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


    Цитата:
    Где-то так, я только не понял сама программа консольная?
     
     
    Код:
     
    @echo off
    setlocal enabledelayedexpansion
     
    for %%i in (1,2,3,4) do (
        for %%j in (a,s,d,c,e) do set y_%%i_!random!=%%j
        for %%j in (1,2,3,4,5) do set x_%%i_!random!=%%j
    )
     
    for %%i in (1,2,3,4) do (
        for /f "tokens=4 delims=_=" %%j in ('set x_%%i') do set x-%%i=%%j
        for /f "tokens=4 delims=_=" %%j in ('set y_%%i') do set y-%%i=%%j
    )
     
    :: Если программа консольная
    start /b prog.exe %x-1%%y-1%%x-2%%y-2%-%x-3%%y-3%%x-4%%y-4%
     
    :: Если не консольная
    start "" prog.exe %x-1%%y-1%%x-2%%y-2%-%x-3%%y-3%%x-4%%y-4%
     

     
    Программа не консольная, но твой код не работает!
     
    Вот лог:
     

    Код:
    C:\>volumeid.bat
     
    C:\>setlocal enabledelayedexpansion
     
    C:\>for %i in (1 2 3 4) do (
    for %j in (a s d c e) do set y_%i_!random!=%j
     for %j in (1 2 3 4 5) do set x_%i_!random!=%j
    )
     
    C:\>(
    for %j in (a s d c e) do set y_1_!random!=%j
     for %j in (1 2 3 4 5) do set x_1_!random!=%j
    )
     
    C:\>set y_1_!random!=a
     
    C:\>set y_1_!random!=s
     
    C:\>set y_1_!random!=d
     
    C:\>set y_1_!random!=c
     
    C:\>set y_1_!random!=e
     
    C:\>set x_1_!random!=1
     
    C:\>set x_1_!random!=2
     
    C:\>set x_1_!random!=3
     
    C:\>set x_1_!random!=4
     
    C:\>set x_1_!random!=5
     
    C:\>(
    for %j in (a s d c e) do set y_2_!random!=%j
     for %j in (1 2 3 4 5) do set x_2_!random!=%j
    )
     
    C:\>set y_2_!random!=a
     
    C:\>set y_2_!random!=s
     
    C:\>set y_2_!random!=d
     
    C:\>set y_2_!random!=c
     
    C:\>set y_2_!random!=e
     
    C:\>set x_2_!random!=1
     
    C:\>set x_2_!random!=2
     
    C:\>set x_2_!random!=3
     
    C:\>set x_2_!random!=4
     
    C:\>set x_2_!random!=5
     
    C:\>(
    for %j in (a s d c e) do set y_3_!random!=%j
     for %j in (1 2 3 4 5) do set x_3_!random!=%j
    )
     
    C:\>set y_3_!random!=a
     
    C:\>set y_3_!random!=s
     
    C:\>set y_3_!random!=d
     
    C:\>set y_3_!random!=c
     
    C:\>set y_3_!random!=e
     
    C:\>set x_3_!random!=1
     
    C:\>set x_3_!random!=2
     
    C:\>set x_3_!random!=3
     
    C:\>set x_3_!random!=4
     
    C:\>set x_3_!random!=5
     
    C:\>(
    for %j in (a s d c e) do set y_4_!random!=%j
     for %j in (1 2 3 4 5) do set x_4_!random!=%j
    )
     
    C:\>set y_4_!random!=a
     
    C:\>set y_4_!random!=s
     
    C:\>set y_4_!random!=d
     
    C:\>set y_4_!random!=c
     
    C:\>set y_4_!random!=e
     
    C:\>set x_4_!random!=1
     
    C:\>set x_4_!random!=2
     
    C:\>set x_4_!random!=3
     
    C:\>set x_4_!random!=4
     
    C:\>set x_4_!random!=5

     
    Сама прога не запускается!
     
    Добавлено:
    Люди помогите пожалуйста!

    Всего записей: 43 | Зарегистр. 15-04-2009 | Отправлено: 19:14 16-04-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZeroCrash
     
    У меня все работает. Какая у тебя версия виндоз? Убери ненужный start, и если указываешь полный путь к prog.exe, то заключай его в кавычки:
     

    Код:
     
    start "" "C:\Some Foder\prog.exe" %x-1%%y-1%%x-2%%y-2%-%x-3%%y-3%%x-4%%y-4%
     

     
    Что покажет:

    Код:
     
    echo %x-1%%y-1%%x-2%%y-2%-%x-3%%y-3%%x-4%%y-4%  
     

    если дописать в конце батника?

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 20:16 16-04-2009
    batniki



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

    Всего записей: 50 | Зарегистр. 11-02-2008 | Отправлено: 00:53 17-04-2009 | Исправлено: batniki, 00:59 17-04-2009
    Maza_Faka



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

    Цитата:
    нужно подсчитать количество строк в файле и сравнить полученное число с переменной blabla

    Пример:

    Код:
     
    @Echo Off
     
    Set Number=5
     
    For /F "Tokens=3" %%A In ('Find /V /C "" test.txt') Do Set sCount=%%A
     
    If %sCount% GEQ %Number% Echo :GoTo _MyProc
     

    Всего записей: 1420 | Зарегистр. 25-10-2006 | Отправлено: 08:29 17-04-2009
    dessMY

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

    Всего записей: 2 | Зарегистр. 17-04-2009 | Отправлено: 20:38 17-04-2009
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dessMY
    А в чем проблема?  
     
    echo x03g 1>1.txt

    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 23:38 17-04-2009
    dessMY

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемый 01MDM
    Подскажи как вставить символа в начало файла, при этом удалить в нем первые 2 строки символов. Это нужно для оптимизации печати.

    Всего записей: 2 | Зарегистр. 17-04-2009 | Отправлено: 13:03 18-04-2009
    01MDM



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

    Код:
     
    @echo off
     
    echo x03g 1>1.tmp
    more +2 1.txt 1>>1.tmp
    move 1.tmp 1.txt
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 14:57 18-04-2009
    KfarYm

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

    Цитата:
    в cmd выводить мигающий текст  

    код:
    @echo off
    :st
    cls
    color 0e
    echo.
    echo               SOS! SOS! SOS!
    ping -n 3 localhost > nul
    cls
    echo.
    echo.
    ping -n 2 localhost > nul
    goto st
     
    Нижние эхи (по числу верхних) - только чтобы курсор не прыгал при активном окне CMD.
    похоже, значение ping -n 2 минимальное...

    Всего записей: 34 | Зарегистр. 13-08-2005 | Отправлено: 15:27 18-04-2009
    metraton



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

    Всего записей: 152 | Зарегистр. 04-10-2004 | Отправлено: 15:47 18-04-2009
       

    Страницы: 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 100

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 6
    vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru