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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

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

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

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

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

Цитата:
Нет, так не выйдет

я бы как-то так попробовал c перетаскиванием папки на батник:
 

Код:
for /r "%~f1" %%A in (*.exe) do call :_addreg %%A
pause
exit
 
:_addreg
addreg %1
exit /b

Всего записей: 10899 | Зарегистр. 30-04-2006 | Отправлено: 02:12 29-07-2021
kot1313



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

Цитата:
я бы как-то так попробовал c перетаскиванием папки на батник:  

После перетягивания в окно консоли оно сразу закрывается ...

Всего записей: 2365 | Зарегистр. 11-12-2002 | Отправлено: 09:27 29-07-2021
shok

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

Цитата:
После перетягивания в окно консоли оно сразу закрывается ...
 

я не говорил про "окно консоли"
add
ещё можно батник поместить в папку SendTo

Всего записей: 10899 | Зарегистр. 30-04-2006 | Отправлено: 09:49 29-07-2021
Sinclair83

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

Цитата:
Это уже не батник, а программа с полноценным UI должна быть.

Согласен с GCRaistlin.
 
Artem_Butenko
А зачем потребовалось две концепции (отдельно для папок и файлов)?
Можно всё в одном реализовать. Только здесь это офтоп, так как тема по-батникам. Если не критично использование сторонней программы, то стучитесь в ЛС.

Всего записей: 743 | Зарегистр. 07-01-2009 | Отправлено: 15:52 29-07-2021
kraeved



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

Цитата:
Artem_Butenko
1.Только для  выделенных исполняемых файлов (случайно выделенные файлы с иным расширением, должны игнорироваться), путём их "перетаскивания" в окно командной строки, создать строковые параметр в системном реестре, согласно пути, - "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers". Полный путь к исполняемому файлу заключать в кавычки нельзя! Пример строкового параметра, - "C:\MyProgram1\MyProgram1.exe", со значением ~ RUNASADMIN (после символа "тильда" пробел обязателен; значение параметра в кавычк заключать нельзя). … Если можно, то реализовать функцию вывода ошибок.

Открыть консольное окно с ожиданием ввода несложно. Например, set /p "_files=". Перетащим
несколько файлов на такое окно — увы, вставился путь лишь одного из них. Перетащим по одному:
"D:\Мои документы\1.exe""E:\Разбор полётов"D:\МультфильмыD:\2.exe. Как видите, пути слиплись
и не просматривается единый делитель, чтобы разобрать строку на элементы. Поэтому остаётся
использовать классический способ — перетаскивать не на открытое консольное окно, а на батник.
 
   
 
Сохраните код, например, как exeToReg.cmd на Рабочем столе, затем накидывайте файлы и папки.

Код:
@echo off
 
rem Чтобы вести лог ошибок в кодировке UTF8, удалите rem на следующей строке
rem chcp 65001 >nul

 
set "_ext=exe"
set "_logErr=%~dp0exeToReg_errors.txt"
set "_argsCount=0"
 
rem Фильтруем очередь по расширению
:args
    for %%# in (%1) do (
        rem Что на входе?
        if "%%~a#" geq "d" (
            rem Папки
            pushd "%%~#"
            for /r %%@ in (*.%_ext%) do (
                set /a "_argsCount+=1"
                call set "_argsArray[%%_argsCount%%]=%%~@"
            )
            popd
        ) else if "%%~a#" geq "-" (
            rem Файлы
            rem Добавьте /i после if, если помимо расширения exe нужно EXE
            if "%%~x#"==".%_ext%" (
                set /a "_argsCount+=1"
                call set "_argsArray[%%_argsCount%%]=%%~#"
            )
        ) else (
            rem Ошибки
            echo %date% %time%  Error: "%%~#" >> "%_logErr%"
        )
    )
    shift
    if not "%~1"=="" goto :args
 
if %_argsCount%==0 (
    rem Если очередь оказалась пустой, то выходим
    echo Nothing to do. Drag'n'drop some EXECUTABLES on me.
    goto :end
    ) else (
    rem Или же показываем, с чем будем работать
    echo Items to process: %_argsCount%
    call :items
)
 
rem Убедимся, что пользователь желает изменить реестр
choice /n /c cq /m "Shall we (c)ontinue or (q)uit? "
if %errorlevel%==1 (call :items registry) else (exit)
 
:end
    pause & exit
 
:items
    setlocal enableDelayedExpansion & echo;
    for /l %%# in (1,1,%_argsCount%) do (
        if "%1"=="registry" (
            rem Можно добавить ключ /f для тихой перезаписи. А ключ /t REG_SZ необязателен, т.к. этот тип данных по умолчанию.
            reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v "!_argsArray[%%#]!" /d "~ RUNASADMIN"
        ) else (
            echo * !_argsArray[%%#]!
        )
    )
    endlocal & echo; & exit /b

 
2021-08-01
* Добавил обработку папок (избегайте папок с точкой или пробелом на конце).
* Упростил код обработки папок и файлов.
* Добавил вывод возможных ошибок в лог рядом с батником.
* Добавил возможность вести лог ошибок в кодировке UTF8.

Всего записей: 838 | Зарегистр. 01-03-2003 | Отправлено: 14:52 30-07-2021 | Исправлено: kraeved, 03:22 04-08-2021
kot1313



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

Цитата:
Сохраните код, например, как exeToReg.cmd на Рабочем столе, затем перетаскивайте на него файлы

Добавьте пожалуста в Ваш код два дополнительных функционала:
 
1. возможость перетягивать не тока файлы, но и Папки с дальнейшим "захватом" вложенных экхещников
2. способность "захвата" не тока корневой папки, но и вложенных папок и, соответственно, файлов exe в них.
 
Заранее Спасибо

Всего записей: 2365 | Зарегистр. 11-12-2002 | Отправлено: 18:24 30-07-2021 | Исправлено: kot1313, 18:24 30-07-2021
shok

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

Цитата:
 дополнительных функционала

 
концепт я уже приводил для папок. вот как он работает. объедини с файловым "отадминистратором"
 
   
 
 
 
exe_ADMIN.bat

Код:
@echo off
for /r "%~f1" %%A in (*.exe) do call :addreg "" "%%A"
echo. Press any key from exit. . .&pause>nul & EXIT
:addreg
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /v %2 /d "~ RUNASADMIN" /f
exit /b

Всего записей: 10899 | Зарегистр. 30-04-2006 | Отправлено: 18:16 31-07-2021
kot1313



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

Цитата:
концепт я уже приводил для папок. вот как он работает

Да усё работает, просто я проглядел, когда Вы выкладывали батник для папок.
Мой косяк

Всего записей: 2365 | Зарегистр. 11-12-2002 | Отправлено: 19:23 31-07-2021
kraeved



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

Цитата:
kot1313
Добавьте пожалуста … возможость перетягивать не тока файлы, но и Папки с "захватом" вложенных экхещников

Добавил.

Всего записей: 838 | Зарегистр. 01-03-2003 | Отправлено: 03:59 01-08-2021 | Исправлено: kraeved, 19:11 01-08-2021
kot1313



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kraeved
 Усё прекрасно работает    
 
Тока код cmd надо копировать напрямую из текста, а не из режима редактирования
(по началу скопировал по привычке из режима редактирования, и, естественно,  
появились лишние сущности - кмдешник начал ругаться на слова "Colour")

Всего записей: 2365 | Зарегистр. 11-12-2002 | Отправлено: 05:46 01-08-2021 | Исправлено: kot1313, 05:47 01-08-2021
shok

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

Цитата:
Усё прекрасно работает

 
чтобы усё работало "от администратора" - в политике безопасности подкрутить чуток
 
 
   
 
 
 
 
 

Всего записей: 10899 | Зарегистр. 30-04-2006 | Отправлено: 06:25 01-08-2021
kot1313



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

Цитата:
чтобы усё работало "от администратора" - в политике безопасности подкрутить чуток

Первое моё правило настройки Винды - отключить UAC
Так что эта рекомендация не для меня

Всего записей: 2365 | Зарегистр. 11-12-2002 | Отправлено: 21:02 01-08-2021
shok

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

Цитата:
Первое моё правило настройки Винды - отключить UAC

это не UAC

Всего записей: 10899 | Зарегистр. 30-04-2006 | Отправлено: 21:06 01-08-2021
kot1313



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
shok
UserAccountControl переводится с языка наших заклятых партнёров как  
Контроль Учётныйх Записей
UAC = КУЗ
 
Вывод - отключив напрочь КУЗ я и так получаю все плюшки, которые в противном случае нужно будет настраивать в т.ч. и через политики безопасности

Всего записей: 2365 | Зарегистр. 11-12-2002 | Отправлено: 21:25 01-08-2021 | Исправлено: kot1313, 21:26 01-08-2021
shok

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

Цитата:
КУЗ

 
   
 
КУЗ не добавляет привилегии Администратора

Всего записей: 10899 | Зарегистр. 30-04-2006 | Отправлено: 21:35 01-08-2021 | Исправлено: shok, 00:58 02-08-2021
kot1313



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

Цитата:
КУЗ не не добавляет привилегии Администратора

У меня по умолчанию эта надпись стоит в этом окне.
Кстати, даже никогда не обращал на неё внимание ...
А запуск от администратора (как и от TI) есть отдельными пунктами в контекстном меню

Всего записей: 2365 | Зарегистр. 11-12-2002 | Отправлено: 21:43 01-08-2021
Fenrizz



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

Код:
cmd /min /C "set __COMPAT_LAYER=RunAsInvoker && start "" "reg add ...""

 
https://winitpro.ru/index.php/2018/06/28/zapusk-programmy-bez-prav-admina-i-zaprosa-uac/

Всего записей: 393 | Зарегистр. 12-09-2017 | Отправлено: 22:20 01-08-2021 | Исправлено: Fenrizz, 11:45 02-08-2021
shok

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

Цитата:
2021-08-01

код не понимал расширения ".EXE"  (в верхнем регистре)
проблема решилась ключом /i
 
 

Код:
 rem Файлы
            if /i "%%~x#"==".%_ext%" (
                set /a "_argsCount+=1"

Всего записей: 10899 | Зарегистр. 30-04-2006 | Отправлено: 01:47 04-08-2021 | Исправлено: shok, 01:49 04-08-2021
yozhic



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Парни, подскажите, пожалуйста, как сделать:
Каждую строку из одного txt-файла нужно извлечь в отдельный txt-файл.
Иными словами: нужен построчный split.

Всего записей: 2039 | Зарегистр. 20-03-2008 | Отправлено: 11:03 06-08-2021 | Исправлено: yozhic, 11:11 06-08-2021
Fenrizz



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

Код:
@echo off
setlocal EnableDelayedExpansion
 
set /a line=1
 
for /F "tokens=*" %%A in (file.txt) do (  
set /a line+=1
echo %%A >file_!line!.txt )

 
или покрасивее

Код:
@echo off
setlocal EnableDelayedExpansion
 
set /a line=1
 
for /F "tokens=*" %%A in (file.txt) do (  
set /a line+=1
IF !line! leq 9 echo %%A >file_00!line!.txt
IF !line! geq 10 IF !line! leq 99 echo %%A >file_0!line!.txt
IF !line! geq 100 echo %%A >file_!line!.txt )

Всего записей: 393 | Зарегистр. 12-09-2017 | Отправлено: 11:42 06-08-2021 | Исправлено: Fenrizz, 13:22 06-08-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

Компьютерный форум 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