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

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

Модерирует : gyra, Maz

Maz (20-06-2024 22:42): Командная строка, батники, сценарии - bat, cmd (7 часть)  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201

   

Maz



Дед Мазай
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Командная строка, батники\сценарии (bat, cmd)
часть 1 | часть 2 | часть 3 | часть 4 | часть 5
Вопросы, задачи и их решения по работе с командной строкой, файлами, а также сопутствующие ссылки.

Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.
 
Примечание: Большие куски кода заключайте в тэг [ more ].  

Смежные темы:
В помощь системному администратору > Автоматизация администрирования
Microsoft Windows > Сценарии Windows

Полезные ссылки:
· Из Windows XP Professional Product Documentation:
> Описание Cmd.exe > Command shell overview
> Using batch files > Using batch parameters > Using filters > Using command redirection operators
 
· Уроки bat-аники (для начинающих): первый и второй
· Курс из 19 лекций "Командная строка и сценарии Windows"
· Уильям Р. Станек - Командная строка Windows. Справочник администратора
 
· Выполнение BAT-скриптов без вызова окна консоли
· cmdow - изменение параметров и видимости дос-окна, Статья в КОМПЬЮТЕРРАONLINE
· Набор GNU утилит для win32
· HS_Packet.7z - Пакет утилит для организации интерфейса в bat-файлах
· blat - отправка почты из консоли
· Easy Batch Builder+Rus+Crack - Редактор BAT файлов.Через графический интерфейс программы вы сможете быстро конструировать пакетные файлы практически любой сложности. (В комплекте есть Лоадер созданный с помощью Sign Of Misery некоторые антивирусы обзывают его вирусом. Вам решать: ставить или не ставить) (ЗЕРКАЛО)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) ещё и ещё
· Переход из 32-битной версии cmd.exe в 64-битную (1) (2)(3)
 
· Архив всевозможных версий cmd.exe (от Windows NT 3.10 до Windows 11 +Win95cmd +ReactOS) и command.com (DOS 5.0 и выше). Старые командные процессоры можно запускать на более новых ОС, хотя не всё может работать корректно. Подробная документация по командам cmd.exe и стандартным утилитам ОС для NT 3.51, NT 5.0 (Windows 2000) и NT 5.2 (Windows Server 2003). Сборник представляет исторический интерес, а также незаменим для тех, у кого появилось желание сделать свои скрипты работоспобными не только на своей версии ОС.
 
· Большой сборник одним архивом: Сотни Win32 утилит командной строки, нетривиальные .cmd файлы, .bat miniperl скрипты (не требующие полноценной установки Perl), FAR Manager с плагинами и настройками, разное для DOS/DOSBox (откуда под Win32 интерес представляют три продвинутых "мультисистемных" .bat файла да ещё, может быть, оболочка Necromancer DOS Navigator с поддержкой LFN и доступом к буферу обмена Windows). Краткие описания всего - в файликах files.bbs

Всего записей: 39095 | Зарегистр. 26-02-2002 | Отправлено: 13:35 19-09-2020 | Исправлено: metatrop, 07:55 29-11-2022
kraeved



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Filatel7st
Правка прокси в батнике имеет большой недостаток, о котором нашёптывал ещё GCRaistlin
изменение в реестре должно распространиться на систему, что обычно случается с перезапуском.
Убедитесь: откройте IE, посетите myip.ru, включите проксю через батник, нажмите F5; увы и ах.
Поэтому и я предлагал сторонние утилиты, которые меняют и актуализируют настройки.
 
И всё же можно обойтись средством, доступным в Windows 7+ по умолчанию — PowerShell.
См. IEProxyToggle.ps1

Всего записей: 1000 | Зарегистр. 01-03-2003 | Отправлено: 19:54 30-04-2021 | Исправлено: kraeved, 22:42 30-04-2021
Death_INN

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

Код:
FOR /F "tokens=1,2,3" %%a IN ('REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable') DO (
IF "%%c"=="0x0" reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t reg_dword /d 000000001 /f  
IF "%%c"=="0x1" reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t reg_dword /d 000000000 /f)

заюзать так?

Код:
FOR /F "tokens=3" %%a IN ('REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable') DO set /a val=%%a"^"1
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t reg_dword /d "0x%val%" /f

Всего записей: 3538 | Зарегистр. 24-10-2002 | Отправлено: 03:27 01-05-2021
Filatel7st



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

Всего записей: 34 | Зарегистр. 13-04-2021 | Отправлено: 07:47 01-05-2021 | Исправлено: Filatel7st, 07:59 01-05-2021
Fenrizz



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

Код:
FOR /F "tokens=1,2,3" %%a IN ('REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable') DO (  
 IF "%%c"=="0x0"  (reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t reg_dword /d 000000001 /f  
 Reg.exe add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v "DefaultConnectionSettings" /t REG_BINARY /d "460000001e040000030000000e0000003132372e302e302e313a3835383000000000000000000000000000000000000000000000000000000000000000000000000000000000" /f  
 Reg.exe add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v "SavedLegacySettings" /t REG_BINARY /d "4600000085190000030000000e0000003132372e302e302e313a3835383000000000000000000000000000000000000000000000000000000000000000000000000000000000" /f )  
 IF "%%c"=="0x1" (reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v "ProxyEnable" /t reg_dword /d 000000000 /f  
 Reg.exe add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v "DefaultConnectionSettings" /t REG_BINARY /d "460000001d040000010000000e0000003132372e302e302e313a3835383000000000000000000000000000000000000000000000000000000000000000000000000000000000" /f  
 Reg.exe add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections" /v "SavedLegacySettings" /t REG_BINARY /d "4600000084190000010000000e0000003132372e302e302e313a3835383000000000000000000000000000000000000000000000000000000000000000000000000000000000" /f  ) )

Всего записей: 688 | Зарегистр. 12-09-2017 | Отправлено: 08:07 01-05-2021
Filatel7st



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
Спасибо большое! Всё работает, беру на вооружение

Всего записей: 34 | Зарегистр. 13-04-2021 | Отправлено: 09:05 01-05-2021
Saclateni



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
А Вы не могли показать пример отдельно включателя и выключателя вот такого бат файла? Хочу сам разобраться - как это работает.

Всего записей: 13 | Зарегистр. 15-04-2021 | Отправлено: 15:34 02-05-2021
Wu Tang



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

Код:
 
[HKEY_CLASSES_ROOT\*\shell\notepad]
@="Открыть в Блокноте"
"icon"="C:\\Program Files (x86)\\Notepad++\\notepad++.exe,0"
 
[HKEY_CLASSES_ROOT\*\shell\notepad\command]
@="\"C:\\Program Files (x86)\\Notepad++\\notepad++.exe\" \"%1\""
 

и на х86 и х64 осях, те чтобы путь менялся сам, либо на program files (x86) либо на program files.
как реализовать переменную в рег файле, я не нашел, спросил в смежной теме на всякий, может по средствам bat это возможно?

----------
Всему свое время и каждому свой час!
Хочешь жить - умей вертеться!

Всего записей: 3880 | Зарегистр. 15-10-2007 | Отправлено: 16:08 03-05-2021
Death_INN

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

Код:
@echo off
if exist "%ProgramFiles(x86)%" (set ver=) else (set "ver= (x86)")
Reg.exe add "HKCR\*\shell\notepad" /v "" /t REG_SZ /d "Открыть в Блокноте" /f
Reg.exe add "HKCR\*\shell\notepad" /v "icon" /t REG_SZ /d "C:\Program Files%ver%\Notepad++\notepad++.exe,0" /f
Reg.exe add "HKCR\*\shell\notepad\command" /v "" /t REG_SZ /d "\"C:\Program Files%ver%\Notepad++\notepad++.exe\" \"%%1\"" /f

Всего записей: 3538 | Зарегистр. 24-10-2002 | Отправлено: 18:25 03-05-2021
Wu Tang



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Death_INN
немного не так прописывается, видимо я не корректно сформулировал, а можно сделать так, чтобы на х64 оси он прописывался с путем - program files (x86), а на х86 оси с путем - program files.

----------
Всему свое время и каждому свой час!
Хочешь жить - умей вертеться!

Всего записей: 3880 | Зарегистр. 15-10-2007 | Отправлено: 19:15 03-05-2021
kraeved



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

Цитата:
Wu Tang
…чтобы на х64 оси прописывался с путём program files (x86), а на х86 оси с путём program files.


Код:
@echo off
if defined ProgramFiles(x86) (set "_path=%ProgramFiles(x86)%") else (set "_path=%ProgramFiles%")
reg add "HKCR\*\shell\notepad" /ve /d "Открыть в Блокноте" /f
reg add "HKCR\*\shell\notepad" /v "icon" /d "%_path%\Notepad++\notepad++.exe,0" /f
reg add "HKCR\*\shell\notepad\command" /ve /d "\"%_path%\Notepad++\notepad++.exe\" \"%%1\"" /f  
goto :eof

 
Правки:
  • 2021-05-09 00:52 сменил подход с cd… на if defined…
  • 2021-05-09 22:21 отказался от /t REG_SZ, т.к. этот тип данных и так идёт по умолчанию, и укоротил /v "" до /ve
  • 2021-05-11 05:45 отказался от избыточного очищения переменной %ProgramFiles% с помощью : (x86)=

  • Всего записей: 1000 | Зарегистр. 01-03-2003 | Отправлено: 20:51 03-05-2021 | Исправлено: kraeved, 05:47 11-05-2021
    Wu Tang



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kraeved
    этот вариант обрезает путь в реестре на х86 - http://ipic.su/img/img7/fs/2021-05-05_13-04-47.1620576806.jpg
     
    ps пока ру-борд лежал, на oszone подкинули рабочий вариант:

    Код:
     
    setlocal
     
    if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
        %SystemRoot%\SysWOW64\cmd.exe /c ""%~f0" %*"
    ) else (
        xcopy "Notepad++" "%ProgramFiles%\Notepad++" /H /E /G /Q /R /Y /I
        reg add "HKCR\*\shell\notepad" /ve /d "Открыть в Блокноте" /f
        reg add "HKCR\*\shell\notepad" /v "icon" /d "%ProgramFiles%\Notepad++\notepad++.exe,0" /f
        call reg add "HKCR\*\shell\notepad\command" /ve /d "\"%%ProgramFiles%%\Notepad++\notepad++.exe\" \"%%%%1\"" /f
    )
     
     

    поэтому всем помогавшим спасибо.

    ----------
    Всему свое время и каждому свой час!
    Хочешь жить - умей вертеться!

    Всего записей: 3880 | Зарегистр. 15-10-2007 | Отправлено: 19:15 09-05-2021
    kraeved



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Wu Tang
    У меня не обрезает. Проверял на XP x86, Vista x86, Win 7 x86, Win 7 x64 с запуском cmd.exe x86 и x64.
    Убедитесь, что взяли последнюю версию скрипта от ночи 9 мая, а не вечера 3 мая, когда упал форум.

    Всего записей: 1000 | Зарегистр. 01-03-2003 | Отправлено: 21:50 09-05-2021 | Исправлено: kraeved, 22:13 09-05-2021
    Wu Tang



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kraeved
    а, я тестил который, до падения форума, сейчас проверю обновленный тогда.
     
    ps проверил, этот срабатывает корректно и на х86 и на х64!
    интересно теперь, а какой вариант правильнее или они равнозначны, просто по разному реализованы...

    ----------
    Всему свое время и каждому свой час!
    Хочешь жить - умей вертеться!

    Всего записей: 3880 | Зарегистр. 15-10-2007 | Отправлено: 18:08 10-05-2021 | Исправлено: Wu Tang, 18:27 10-05-2021
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Wu Tang
    Цитата:
    интересно теперь, а какой вариант правильнее или они равнозначны
    оба варианта одинаково некорректно написаны ибо в случае проверки переменных окружения PROCESSOR_ARCHITECTURE и PROCESSOR_ARCHITEW6432 необходимо проверять обе, а не одну.
    Логично предположить что ProgramFiles(x86) и ProgramW6432 имеют аналогичную направленность - но в отношении именно этих переменных я расширенных проверок не проводил...
     
     
     
    Добавлено:
    Ну и для примера
    Код:
    ECHO "%PROCESSOR_ARCHITECTURE%""%PROCESSOR_ARCHITEW6432%"|1>NUL 2>NUL FIND /I "64"&&SET "MY_SYSTEM=X64"||SET "MY_SYSTEM=X86"
    ECHO Разрядность запущенной системы - %MY_SYSTEM%

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 19:00 10-05-2021
    kraeved



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Wu Tang
    То, что вам предложили на OSzone, это случай спагетти-кода.
    В частности, незакрытый setlocal, мудрёная проверка битности системы,
    ненужный xcopy, добавление ключа через call и избыточные проценты.
     
    Мой подход оставляет куда меньше места для ошибок, так как логичнее.
    Если объявлена переменная ProgramFiles(x86), то это 64-битная система,
    в которой (по вашим условиям) нужен путь до папки Program Files (x86).
    При этом я не задаю название папки, а подставляю значение переменной,
    что позволяет использовать скрипт даже в испанской Windows, где папка
    называется Archivos de programa (x86). Если переменная ProgramFiles(x86)
    отсутствует, то это 32-битная система, где есть переменная ProgramFiles.

    Всего записей: 1000 | Зарегистр. 01-03-2003 | Отправлено: 05:01 11-05-2021 | Исправлено: kraeved, 05:44 11-05-2021
    wadimuss

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kraeved
    переменная ProgramW6432 используется только в х64

    Всего записей: 1125 | Зарегистр. 24-11-2008 | Отправлено: 07:54 11-05-2021
    yurkesha



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kraeved
    Цитата:
    Если объявлена переменная ProgramFiles(x86), то это 64-битная система
    Это как раз тривиальный случай.  
    А точно ли если такой переменной нет система 32-х битная? Или может командный интерпретатор запущенный в 32-битном режиме видит только то что ему автоподставляет система?
     
     
    Добавлено:
    Во всяком случае при анализе PROCESSOR_ARCHITECTURE приходится учитывать именно этот нюанс...
    И естественно я ничего не навязываю - ну есть неуниверсальный код который может неправильно работать при определенных условиях - ну и что - главное чтоб пользователя кода это устраивало

    Всего записей: 2757 | Зарегистр. 15-12-2003 | Отправлено: 09:10 11-05-2021
    GCRaistlin



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

    Цитата:
    Если объявлена переменная ProgramFiles(x86), то это 64-битная система

    Переменную объявить - раз плюнуть. Этот способ проверки ненадежен.
    http://forum.ru-board.com/topic.cgi?forum=5&topic=48565&start=2000#15

    ----------
    Magically yours
    Raistlin

    Всего записей: 4119 | Зарегистр. 18-04-2005 | Отправлено: 09:14 11-05-2021
    kraeved



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GCRaistlin
    Мне известен этот способ. Считаю его узкоспециальным, сложным для запоминания
    и здесь избыточным, т.к. требуется не достовернейший ответ про битность системы,
    а один из двух путей. Они, как и соответствующие переменные ProgramFiles*, в 99,9%
    случаев не меняются ни пользователями, ни программами. Это же не папка Temp, кою
    иногда переносят на RAM-диск (меняя переменные Temp и Tmp*), дабы сберечь циклы
    перезаписи SSD. Подобное вам ответили и там: «При желании можно и wmic обмануть».
    Словом, я за разумные допущения, а не за соревнования под микроскопом, тем более
    с теми, кто в силу тревожности отягощается зонтом и галошами из-за одного облачка
    и отрицает всякое строительство, кроме сейсмостойкого, из-за движения литосферы.
     
    WuTang
    Утром ещё уменьшил скрипт — пользуйтесь на здоровье, а остальное тут казуистика.
    Дашь волю Огурцовым, придерутся и к goto :eof, потребуют писать как exit /b, чтобы
    передавать errorlevel, а уж при виде :: вместо rem для комментариев и вовсе закипят.

    Всего записей: 1000 | Зарегистр. 01-03-2003 | Отправлено: 13:30 11-05-2021 | Исправлено: kraeved, 22:26 11-05-2021
    GCRaistlin



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

    Цитата:
    Словом, я за разумные допущения.

    Для допущения должны быть причины, неустранимые при заданных условиях. Здесь их нет.

    ----------
    Magically yours
    Raistlin

    Всего записей: 4119 | Зарегистр. 18-04-2005 | Отправлено: 13:41 11-05-2021 | Исправлено: GCRaistlin, 13:44 11-05-2021
       

    Страницы: 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 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201

    Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии - bat, cmd
    Maz (20-06-2024 22:42): Командная строка, батники, сценарии - bat, cmd (7 часть)


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru