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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

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.51 до Windows 10) и command.com (DOS 5.0 и выше). Старые командные процессоры можно запускать на более новых ОС, хотя не всё может работать корректно. Подробная документация по командам cmd.exe и стандартным утилитам ОС для NT 3.51, NT 4.0, NT 5.0 (Windows 2000) и NT 5.2 (Windows Server 2003). Сборник представляет исторический интерес, а также незаменим для тех, у кого появилось желание сделать свои скрипты работоспобными не только на текущей версии ОС. Ссылки wdho.ru tinyupload.com dbree.org
 
· Сборник одним архивом: Сотни Win32 утилит командной строки, нетривиальные .cmd файлы, .bat miniperl скрипты (не требующие полноценной установки Perl), FAR Manager с плагинами и настройками, разное для DOS/DOSBox (откуда под Win32 интерес представляют три продвинутых "мультисистемных" .bat файла да ещё, может быть, оболочка Necromancer DOS Navigator с поддержкой LFN и доступом к буферу обмена Windows). Краткие описания всего - в файликах files.bbs

Всего записей: 37237 | Зарегистр. 26-02-2002 | Отправлено: 13:35 19-09-2020 | Исправлено: Maz, 07:16 24-04-2021
kraeved



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

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

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



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

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



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  ) )

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



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

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

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

Всего записей: 3 | Зарегистр. 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 это возможно?

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

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

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



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

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

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

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

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

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

    Всего записей: 3291 | Зарегистр. 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 мая, когда упал форум.

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



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

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

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

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

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

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

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



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

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

    Всего записей: 2979 | Зарегистр. 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 для комментариев и вовсе закипят.

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



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

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

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

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

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

    Компьютерный форум Ru.Board » Компьютеры » Программы » Командная строка, батники, сценарии - bat, cmd


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2020

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru