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

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


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

    Всего записей: 2741 | Зарегистр. 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.

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

    Всего записей: 2741 | Зарегистр. 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 /? - я же писал уже...


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

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yurkesha, пожалуйста, не нравится в качестве примера консоль cmd.exe, "доберитесь" до 64-битного файла запуска "Подключение к удаленному рабочему столу":
     

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

     
    В первом случае (64-битная консоль) mstsc.exe и mstsc.exe *32, во втором случае (32-ух битная консоль) mstsc.exe *32 и mstsc.exe *32.  
    64-битная консоль вызывается 64-битным приложением, 32-ух битная соответственно 32-ух битным. Задача состоит в том, чтобы 32-битным приложением "добраться" до 64-битной консоли.
     
    P.S. Вы суть Вашей цитаты из хелпа сами хоть поняли?

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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как с помощью bat файла, можно создавать файлы *.txt, где * - это произвольное имя файла, которое генерится случайным образом из букв или цифр (например, чтобы при запуске name.bat создавался файл hgfhf.txt, если запустить name.bat повторно - будет создан dlfjskl.txt)?

    Всего записей: 8 | Зарегистр. 04-08-2009 | Отправлено: 10:34 29-12-2009
    slay1212

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

     Эт да . Попробуй в фаре или тотале  в винде x64, посмотреть например файл hosts . Думаю ты его не найдешь, хотя он там есть . А через проводник - но проблем. Также и при составлении батников надо это учитывать
    Чем спорить лучше народу бы выложили кусок кода для проверки приложений

    Цитата:
    написать скрипт, который будет одинаково работать как в 32-битной ОС, так и в 64-битной ОС, тогда, возможно, поймете суть проблемы

     

    Всего записей: 336 | Зарегистр. 28-05-2008 | Отправлено: 10:57 29-12-2009
    noiseless

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SeriouSShat
    См. переменную %RANDOM%
     
    set filenam=%random%
    echo > %filenam%.txt

    Всего записей: 182 | Зарегистр. 06-02-2006 | Отправлено: 11:12 29-12-2009 | Исправлено: noiseless, 11:15 29-12-2009
    TechnicsKuzya



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Все просто, для проверки соответствия среды в Script name.cmd:

    Код:
     
    if not "%PROCESSOR_ARCHITECTURE%"=="AMD64" (exit)
     

    Для одинаковой работоспобности скрипта в 32-ух и 64-ех разрядных ОС, запускаем через отдельный скрипт Start.cmd:  

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

    При желании можно внедрить в основной скрипт использую команду Start /B:

    Код:
     
    @echo off
    start /B .\Tools\cmd.exe /Q /K "call METKA"
    exit&exit
     
    :METKA
    echo Основной скрипт
    goto :EOF
     

    Рядом со скриптом, в папке Tools должен находиться 64-битный cmd.exe "выдернутый" с помощью проводника их system32.
     
    Либо в Vista\Seven x64 можно пойти другим путем:

    Код:
     
    @echo off
    %WinDir%\Sysnative\cmd.exe /Q /K "call Script name.cmd"
    exit
     

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

    Тогда ничего "выдергивать" не нужно. Чтобы такое же решение использовать в XP x64 - необходимо установить специальное техническое обновление, для включения поддержки виртуальной папки %WinDir%\Sysnative в 32-разрядной среде.

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



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

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

    так вот какой-то разницы возможностей доступа к папкам из батника, не связанных с разными настройками предустановленных переменных - пока и не видно.
    И даже пример с диром системных папок дан.
    Я чего-то пропустил?

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 21:04 29-12-2009 | Исправлено: wolf0425, 21:07 29-12-2009
    AntoshAReal



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

    Код:
    Windows Registry Editor Version 5.00
     
    [HKEY_CURRENT_USER\Software\Microsoft\Office\Common\UserInfo]
    "UserInitials"="Инициалы"
    "CompanyName"="Имя компании"
    "Company"="Компания"
    "UserName"="Имя пользователя"

     
    Но вместо "Имя пользователя", был добавлен текст из переменной %USERNAME%, а при "Инициалы", выдавался запрос на ручной ввод с примером, после всего этого полученное добавлялось в реестр.
     
    Будьте так добры, помогите написать, ну или подсказать, как это осуществить.
    Спасибо.
     
    С наступающим!

    Всего записей: 305 | Зарегистр. 31-08-2005 | Отправлено: 21:14 29-12-2009 | Исправлено: AntoshAReal, 21:25 29-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