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

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

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

vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

   

vu1tur



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

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

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

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 11:37 26-05-2009 | Исправлено: TechnicsKuzya, 13:53 27-12-2009
    mugil_cephalus

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    нам в шапку не нужно?
     
    Добавлено:
     
    отредактировал до "версии" 2 - еще добавил кодов
     
    отредактировал до "версии" 3 - еще добавил кодов
     
     
     
    часть 1 Подробнее...
     

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 17:50 26-12-2009 | Исправлено: mugil_cephalus, 21:34 26-12-2009
    mugil_cephalus

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

    Всего записей: 1072 | Зарегистр. 07-09-2009 | Отправлено: 21:31 26-12-2009 | Исправлено: mugil_cephalus, 21:34 26-12-2009
    TechnicsKuzya



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кому необходимо запускать, с помощью 32-битного sfx-модуля 7-Zip (или любого другого 32-битного приложения), cmd-скрипт ориентированный на обработку 64-битным cmd.exe, вот рабочее решение:
     
    К примеру, есть скрипт Setup_64.cmd, ориентированный на использование 64-битной версии cmd.exe.  
     
    В папку Tools помещаем 64-битный cmd.exe из папки C:\Windows\System32 (копировать только через 64-битный софт, иначе будет редирект в папку C:\Windows\SysWow64 и Вы скопируете 32-битный cmd.exe).
     
    Подтверждением того, что Вы используете 64-битную версию коммандного процессора, может служить его соответствующее отображение в диспетчере задач, т.е. без идентификатора *32.  
     
     
    Создаем скрипт, к примеру Start.cmd c содержанием:
     

    Код:
    @echo off
    .\Tools\cmd.exe /Q /K "call Setup_64.cmd"
    exit

     
    Теперь запускаем с помощью sfx-модуля - скрипт Start.cmd - он будет запущен с помощью 32-битной версии cmd.exe (В диспетчере задач увидете cmd.exe *32), а скрипт Start_64.cmd уже будет вызван с помощью 64-битной версии cmd.exe (в диспетчере задач увидете рядом с cmd.exe *32 - cmd.exe) - это и будет среда выполнения скрипта Start_64.cmd.

    ----------
    Все гениальное, просто!
    TechnicsKuzya site

    Всего записей: 495 | Зарегистр. 02-02-2008 | Отправлено: 09:08 27-12-2009 | Исправлено: TechnicsKuzya, 12:05 27-12-2009
    GORA2



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

    Цитата:
    64-битный cmd-скрипт

    А что это такое? Чем отличается от обыкновенного, как и чем его создавать?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 09:20 27-12-2009
    TechnicsKuzya



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2, под 64-битной версией Windows XP/Vista/7.
    В вышеуказанных версиях Windows - есть режим эмуляции 32-битной среды. По-умолчанию, вы создаете скрипт и тестируете его работу в 64-разрядном приложении cmd.exe, но если Вы захотите его упаковать, к примеру с помощью 7-zip (sfx-модуль в данном архиваторе, пока что 32-разрядный), то возможно нарушение работы скрипта, т.к. 32-разрядный модуль sfx, будет вызывать 32-разрядную версию cmd.exe для обработки скрипта, при этом происходит изменение переменных среды для 32-битного режима.
     
    Коротко, если Вы хотите полноценно использовать 64-битную систему (доступ ко всем системным папкам, реестру и т.д.), cmd-скрипт необходимо запускать только с помощью 64-битной версии cmd.exe
     
    Если в таких системах пользоваться проводником или 64-битным файловым менеджером, то:
    64-bit cmd.exe - расположен в %WinDir%\System32\cmd.exe
    32-bit cmd.exe - расположен в %WinDir%\SysWOW64\cmd.exe
     
    При запуске cmd.exe из %WinDir%\SysWOW64\cmd.exe при попытке обращения к папке %WinDir%\System32 из командного процессора, Вы будете перенаправлены в папку %WinDir%\SysWOW64, т.к. 32-битное приложение не должно работать с папками предназначенными для 64-битных приложений. В принципе, в Vista/Seven x64 уже есть способ обхода данного ограничения, в XP x64 - только с применением специального технического обновления. Вышеуказанный способ универсальный для вышеуказанных систем.  
     
    P.S. Выше я некорректно описал суть. Поэтому "64-битный cmd-скрипт" заменил на "cmd-скрипт ориентированный на обработку 64-битным cmd.exe", так точнее.

    ----------
    Все гениальное, просто!
    TechnicsKuzya site

    Всего записей: 495 | Зарегистр. 02-02-2008 | Отправлено: 11:14 27-12-2009 | Исправлено: TechnicsKuzya, 11:27 27-12-2009
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TechnicsKuzya
    Из вашего объяснения следует, что ни каких отличий в самих файлах скриптов не существует. Эти файлы ни чем не отличаются в версиях х86/х64. Различаются переменные среды в зависимости от режима запуска самого скрипта. Тогда так и надо говорить, не вводя новых понятий "64-битный cmd-скрипт".

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 11:28 27-12-2009
    TechnicsKuzya



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2, я уже исправил свою ошибку.
     
    Различаются не только переменные среды, но и возможности доступа к папкам. В скрипт предназначенный для 64-битной среды также не помешает добавить проверку переменной PROCESSOR_ARCHITECTURE, иначе, при запуске, для примера, из традиционного файлового менеджера TotalCommander 32-bit, также могут возникнуть проблемы. Вышеуказанный скрипт способен их решить. Кроме того, приведенный код скрипта можно объединить с основным кодом, и тем самым получить универсальный скрипт, который будет корректно работать при запуске хоть из 32-битного приложения, хоть из 64-битного.

    Всего записей: 495 | Зарегистр. 02-02-2008 | Отправлено: 11:33 27-12-2009 | Исправлено: TechnicsKuzya, 11:42 27-12-2009
    GORA2



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

    Цитата:
    Различаются не только переменные среды, но и возможности доступа к папкам.

    Следующий скрипт был запущен на Win7 x64
    Код:
    @Echo Off
    SetLocal enabledelayedexpansion
    Set DirProg=c:\Program Files
    Set flag=0
    For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S /A:-D') Do (
        If !flag!==1 Set dirsize=%%c
        If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
    )
    Echo !dirsize!
    Set DirProg=c:\Program Files (x86)
    Set flag=0
    For /F "skip=4 tokens=1-3" %%a IN ('Dir "%DirProg%" /-C /S /A:-D') Do (
        If !flag!==1 Set dirsize=%%c
        If "%%b"=="файлов:" (Set flag=1) Else (Set flag=0)
    )
    Echo !dirsize!
    Pause>nul
    Запускал из 64-битной среды и из 32-битной (ТС), Результаты запуска дали одинаковые результаты. Битность запущенного интерпретатора cmd.exe контролировалась в диспетчере задач.
    Вывод: к папкам c:\Program Files (x86) и c:\Program Files доступ имеется из любой версии интерпретатора.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 12:00 27-12-2009
    TechnicsKuzya



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2, привяжите Ваш скрипт к переменной %ProgramFiles%. Получите доступ из Вашего скрипта к папке %WinDir%\System32. Запустите из скрипта, какой-нибудь файл из папки %WinDir%\System32.
     
    Проверьте работу скрипта при запуске Windows Explorer и TotalCmd.

    ----------
    Все гениальное, просто!
    TechnicsKuzya site

    Всего записей: 495 | Зарегистр. 02-02-2008 | Отправлено: 12:10 27-12-2009 | Исправлено: TechnicsKuzya, 12:16 27-12-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TechnicsKuzya
    Так ведь уважаемый GORA2 и сказал:
    Цитата:
    Различаются переменные среды в зависимости от режима запуска самого скрипта.
    А
    Цитата:
    возможности доступа к папкам
    это от лукавого
    Никто пока новых прав на NTFS не изобрел...
     


    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 12:20 27-12-2009
    TechnicsKuzya



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha, проблема не с правами NTFS, а с редиректом. Когда возникнет необходимость написать скрипт, который будет одинаково работать как в 32-битной ОС, так и в 64-битной ОС, тогда, возможно, поймете суть проблемы.
     
    Не просто так в новых 64-битных системах существует папка %WinDir%\SysNative, а для старых выпустили патч http://support.microsoft.com/kb/942589. А если Вам к тому же с помощью скрипта необходимо будет установить софт, у которого универсальный инсталлятор (устанавливает приложение x32 или x64 в зависимости от среды из которой он был запущен)... вот тогда тем более поймете суть вышеописанного, когда захотите получить универсальность.

    ----------
    Все гениальное, просто!
    TechnicsKuzya site

    Всего записей: 495 | Зарегистр. 02-02-2008 | Отправлено: 12:21 27-12-2009 | Исправлено: TechnicsKuzya, 12:30 27-12-2009
    GORA2



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

    Цитата:
    Различаются не только переменные среды, но и возможности доступа к папкам.

    Еще раз обращаю ваше внимание на то, что я привел Вам пример в котором скрипт ИМЕЕТ доступ в папкам. Вы предлагаете мне прописать путь через переменные о которых мы уже говорили и с ними все ясно, они меняются в зависимости от среды. Не надо передергивать. Если речь идет о доступе к папкам, то Вы не правы, и доступ есть. Не надо теперь сюда приплетать снова переменные, формулируйте свою мысль сразу и четко, дабы потом не приходилось искать какие-то хитрые оправдания.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 12:30 27-12-2009
    TechnicsKuzya



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2, со всем уважением, получите доступ к конкретной папке C:\Windows\System32, без ухищрений, из 32-битного командного процессора 64-битной ОС. Отвечу заранее Вашими словами - доступа, в этом случае к указанной папке, нет.
     
    Возможности доступа к папкам - не означает, что этого доступа вовсе нет или он ограничен. Это означает, что способ доступа к папкам будет различный.

    ----------
    Все гениальное, просто!
    TechnicsKuzya site

    Всего записей: 495 | Зарегистр. 02-02-2008 | Отправлено: 12:31 27-12-2009 | Исправлено: TechnicsKuzya, 12:44 27-12-2009
    GORA2



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

    Цитата:
    получите доступ к конкретной папке C:\Windows\System32, без ухищрений, из 32-битного командного процессора 64-битной ОС. Отвечу заранее Вашими словами - доступа, в этом случае к указанной папке, нет.  

    Пожалуйста.
    Код:
    @Echo Off
    Start "x64" c:\Windows\System32
    Start "x32" c:\Windows\SysWOW64
    exit
     
    Доступ к обеим папкам "из 32-битного командного процессора 64-битной ОС есть! Будем дальше выкручиваться!?

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 13:13 27-12-2009
    TechnicsKuzya



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Разочарую Вас, запустите данный скрипт и скажите мне, какие версии cmd.exe у Вас будут запущены при запуске из Windows Explorer, а какие при запуске из Total Commander.
     

    Код:
    @Echo Off  
    Start "x64" c:\Windows\System32\cmd.exe
    Start "x32" c:\Windows\SysWOW64\cmd.exe
    exit

     
    Ответ: в первом случае cmd.exe и cmd.exe *32, во втором случае cmd.exe *32 и cmd.exe *32. А причина такого поведения описана тут...
     
    Добавлено:
    GORA2, пожалуйста, прежде, чем писать, что-то вроде "Будем дальше выкручиваться!?" - изучите предварительно техническую информацию обсуждаемого вопроса.
     
    P.S. Кстати, для того, чтобы из последней версии TotalCmd получить доступ к реальной папке %WinDir%\System32 - необходимо отключить в файле настроек Redirect, иначе при открытии папки %WinDir%\System32, реально Вы будете открывать содержимое папки %WinDir%\SysWOW64. Но при отключении Redirect в TotalCmd возникают другие проблемы... Поэтому дальнейшее развитие данного файлового менеджера скорее всего возможно только путем перехода автором на другой язык программирования, компилятор которого поддерживает создание 64-битных приложений. В общем это уже вопрос совершенно другой ветки...

    ----------
    Все гениальное, просто!
    TechnicsKuzya site

    Всего записей: 495 | Зарегистр. 02-02-2008 | Отправлено: 13:27 27-12-2009 | Исправлено: TechnicsKuzya, 13:40 27-12-2009
    GORA2



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TechnicsKuzya
    Вы в очередной раз передергиваете. Я привел Вам пример доступа к указанным Вами папкам, но Вы даже не соизволили подтвердить, что я в очередной раз оказался прав и Вы, именно Вы, не правильно формулируете свою мысль утверждая, что к папкам нет доступа.
    Цитата:
    изучите предварительно техническую информацию обсуждаемого вопроса.

    После этого, наш дальнейший диспут считаю бессмысленным. А над терминологией все же Вам советую поработать.

    Всего записей: 1271 | Зарегистр. 26-01-2006 | Отправлено: 14:02 27-12-2009
    TechnicsKuzya



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GORA2, вышеуказанным Вами скриптом, Вы не получили доступ к реальной папке %Windir%\System32 из под 32-битного командного процессора 64-битной ОС, точка. Конкретно я не утверждал, что доступа к папкам, нет, это Ваши слова.
     
    P.S. Если Вас не интересовал изначально этот вопрос, не надо было вообще начинать всю эту болтологию.

    Всего записей: 495 | Зарегистр. 02-02-2008 | Отправлено: 14:04 27-12-2009 | Исправлено: TechnicsKuzya, 14:08 27-12-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TechnicsKuzya
    Ты не прав.
    Безо всяких статей базы знаний - выдержка из хелпа по start /?:
    Код:
    При выполнении командной строки, первым элементом которой является текстовая
        строка "CMD" без расширения имени файла или указания пути, она заменяется
        значением переменной COMSPEC. Это предотвращает запуск CMD.EXE из
        текущей активной папки, если таковая программа там имеется.
     
    Расшифровать что это обозначает? Приведенный пример запуска некоректен изначально... И все упирается ИСКЛЮЧИТЕЛЬНО в переменные окружения... В данной ситуации в COMSPEC.

    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 14:08 27-12-2009
    TechnicsKuzya



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha, уж расшифруйте, как Вы это понимаете.
     
    С учетом данного примера. И запуска с использованием расширения имени файла и указанием полного пути.
     
    P.S. Я так полагаю расшифровывать прийдется мне Вам, с учетом того, что переменная ComSpec имеет одинаковое значение в обоих случаях.  
    Простая задача - запустите из 32-битного командного процессора, 64-битную версию, которая находится в папке %WinDir%\System32. А после этого объясните, коим боком Вы приплели переменную окружения %ComSpec%.

    Всего записей: 495 | Зарегистр. 02-02-2008 | Отправлено: 14:15 27-12-2009 | Исправлено: TechnicsKuzya, 14:21 27-12-2009
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    TechnicsKuzya
    Сам запуск cmd.exe некоректен в качестве примера.
    Расмотри лучше запуск любой другой проги 64 бит из 32-разрядной консоли или 32 бит из-под 64-х разрядной консоли. В этой ситуации разницы нет.
    Расшифровывать мне не надо - я и так в курсе что запуск cmd.exe зависит от ряда условий...

    Цитата:
    коим боком Вы приплели переменную окружения %ComSpec%.
    start /? - я же писал уже...


    ----------
    Всем непричастным рекомендую прогулки на свежем воздухе

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 14:58 27-12-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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 7
    vu1tur (25-01-2010 12:41): лимит страниц, продолжение: http://forum.ru-board.com/topic.cgi?forum=62&topic=19668


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru