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

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

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

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

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

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
можно даже сказать десятки лет постановка вопроса была как запустить консоль невидимой. но гораздо удобнее скрыл\посмотрел.
window_show_hide.zip 645 байт (645 байт)
без кавычек просто имя окна. если окно hide становится show и наоборот

Всего записей: 3338 | Зарегистр. 29-03-2016 | Отправлено: 11:48 25-01-2022 | Исправлено: bomzz, 11:49 25-01-2022
Baltazar500



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis,
Цитата:
Конструкции в скобках рассматриваются как единый блок и к моменту раскрытия переменной TestTime она ещё не существует. Поэтому следует использовать setlocal enabledelayedexpansion и переменные заключать в !!.  
Ясно, спасибо
Цитата:
Ещё с переменными %time% и %date% есть подводный камень - вид их содержимого, внезапно, зависит от региональных настроек. Поэтому то, что работает на одной системе, опять таки внезапно может перестать работать на другой системе.
 
Я в курсе На основной системе у меня именно что кастомные настройки. На тестовой же - дефолтные, но как я уже писал - %time% первое, что подвернулось под руку :/
 
BorlandIMHO, спасибо за примеры. Буду пробовать.

Всего записей: 1904 | Зарегистр. 19-09-2011 | Отправлено: 16:13 26-01-2022
bomzz

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

Цитата:
Xlight FTP Server (Unlicensed):0000002844
IDM agent for click monitoring in IE-based browsers:0000002172
Internet Download Manager 6.38:0000002364
HiddenFaxWindow:0000001528
DDE Server Window:0000002364
BluetoothNotificationAreaIconWindowClass:0000001528
The Event Manager - Status:0000002624
MS_WebcheckMonitor:0000001528
HotKey Listener:0000002632
CtHelper32:0000002516
CtSpkHlp:0000002516
Media Center SSO:0000001528

факир был пьян и фокус не удался, интерпретатор считает что это восьмиричные числа с нулями впереди

Цитата:
set _str=!_out:~-5!
set /a _str=1!_str!
set /a _str=!_str!-100000
echo !_str!

Всего записей: 3338 | Зарегистр. 29-03-2016 | Отправлено: 03:45 27-01-2022 | Исправлено: bomzz, 07:25 27-01-2022
older

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
пользуюсь для этого cmdow.exe
вывод параметров текущего окна батника:

Код:
cmdow.exe @ /F

с помощью ее также можно скрыть/показать окно батника
в шапке эта утилита есть

Всего записей: 332 | Зарегистр. 15-02-2003 | Отправлено: 08:48 27-01-2022
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
older
у меня изначально задача стояла закрыть закрыть окно консоли не убивая процесс,
а по команде wm_close - нажатие крестика. сначала через имя окна порешал.
намучился с русскими буквами. а чтоб универсально было сделал по parent pid.
консоль не текущая.
 
 
вот такой вывод информации самый совместимый:
имя окна и пид процесса выровненный с конца общей строки по числу знаков пробелами.
команда set умеет обрезать лидирующие пробелы при переводе в числовую форму.
таким образом легко найти пид процесса индивидуализированный пробелами в конце строки.
и получить имя\заголовок окна без жутких обрезаний.

Всего записей: 3338 | Зарегистр. 29-03-2016 | Отправлено: 11:04 27-01-2022 | Исправлено: bomzz, 17:50 27-01-2022
insorg



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть текстовик, в котором идут строки типа
 
Release file name program name 1 x86 build (version 1.2.3.4)
Release file name program name 1 x86 build (version 1.2.3.0)
Release file name program name 1 x86 build (version 1.2.0.0)
Release file name program name 2 x86 build (version 2.2.3.4)
Release file name program name 2 x86 build (version 2.2.3.0)
Release file name program name 2 x86 build (version 2.2.0.0)
 
Как получить 1.2.3.4 и 2.2.3.4 в переменных %ver1% и %ver2% ?

Всего записей: 2956 | Зарегистр. 04-11-2010 | Отправлено: 19:30 27-01-2022
BorlandIMHO

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
insorg
Догадываюсь, что в виду имелось нечто иное...
Но, какой вопрос - такой ответ.

Цитата:
Есть текстовик{skip}Как получить 1.2.3.4 и 2.2.3.4 в переменных %ver1% и %ver2% ?


Код:
for /f "usebackq tokens=6,10,11,12,13 delims=(). " %%A in (`type "текстовик в котором идут строки типа.txt"`) do (
    if NOT DEFINED VER%%~A set "VER%%~A=%%~B.%%~C.%%~D.%%~E"
)
set VER
pause


----------
http://www.imho.ws

Всего записей: 1608 | Зарегистр. 12-10-2006 | Отправлено: 20:56 27-01-2022 | Исправлено: BorlandIMHO, 21:20 27-01-2022
insorg



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BorlandIMHO
Да, там более конкретное всякое варезное.  Но на суть не влияет, структура сохранена.
Заодно чуть уточню суть.
В списке program name 1  есть разных версий, а самая новая идёт вверху. For по такой обработке отдаёт самую последнюю строку, а не первую. Как можно его остановить на первом же совпадении program name 1, чтоб он не шёл дальше?

Всего записей: 2956 | Зарегистр. 04-11-2010 | Отправлено: 21:14 27-01-2022
BorlandIMHO

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

Цитата:
 For по такой обработке отдаёт самую последнюю строку, а не первую.

В данном коде VER%%~A присваивается первое найденное значение, остальные игнорятся. Засчёт {if NOT DEFINED}.
Протестил на конкретно вашем "файле".


----------
http://www.imho.ws

Всего записей: 1608 | Зарегистр. 12-10-2006 | Отправлено: 21:24 27-01-2022 | Исправлено: BorlandIMHO, 21:35 27-01-2022
insorg



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

Цитата:
if NOT DEFINED
Хм. Пропустил момент. Сча попробую.
 
 
Добавлено:
Получилось. Спасибо.

Всего записей: 2956 | Зарегистр. 04-11-2010 | Отправлено: 21:24 27-01-2022 | Исправлено: insorg, 21:34 27-01-2022
fscpsd



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если в командную строку отправить прямой слэш, то ответит, что:

Цитата:
"/" не является внутренней или внешней командой, исполняемой программой или пакетным файлом

 
Если отправить тот же прямой слэш и число, например "3", то ответит то же самое:

Цитата:
"/3" не является внутренней или внешней командой, исполняемой программой или пакетным файлом

 
А вот если отправить конструкцию "число"+слэш+"число" (например "7/3"), то ответит так:

Цитата:
"7" не является внутренней или внешней командой, исполняемой программой или пакетным файлом

— то есть и сам слэш, и последнее число сожрутся куда-то.
 
Это почему так?

Всего записей: 585 | Зарегистр. 16-09-2010 | Отправлено: 11:48 28-01-2022
Roman_Hayretdinov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это потому что "/3" воспринимается как параметр команды "7"

Всего записей: 47 | Зарегистр. 19-12-2021 | Отправлено: 13:34 28-01-2022
Susie7



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нужен symlink  папки игры на диск С.
mklink /D "N:\Tomb Raider. Anniversary \\C:     - правильно?


----------
Принцессы бывают не только в сказках

Всего записей: 970 | Зарегистр. 11-07-2018 | Отправлено: 14:43 28-01-2022
fscpsd



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Roman_Hayretdinov
И правда, спасибо.
 
 
 
Susie7
Неправильно.  
В общем виде должно быть так:

Код:
mklink /d "путь_к_создаваемой_ссылке" "путь_к_той_папке_на_которую_ссылка"

Если я вас правильно понял, то в вашем случае должно быть так:

Код:
mklink /d "C:\Tomb Raider. Anniversary" "N:\Tomb Raider. Anniversary"


Всего записей: 585 | Зарегистр. 16-09-2010 | Отправлено: 15:00 28-01-2022 | Исправлено: fscpsd, 15:02 28-01-2022
Susie7



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

Цитата:
mklink /d "C:\Tomb Raider. Anniversary" "N:\Tomb Raider. Anniversary"

Увы и ах, Не найден файл!
 
 
 

Цитата:
mklink /d "C:\Tomb Raider. Anniversary" "N:\Tomb Raider. Anniversary"
 

Только сейчас заметила, тупка, переносить-то на С, а не наоборот


----------
Принцессы бывают не только в сказках

Всего записей: 970 | Зарегистр. 11-07-2018 | Отправлено: 15:26 28-01-2022 | Исправлено: Susie7, 15:28 28-01-2022
fscpsd



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

Цитата:
Не найден файл

Ищите!)) Посмотрите на свой диск N:\ — что там творится?
 

Цитата:
переносить-то на С, а не наоборот

Ну да, оно так и должно было сработать.
 

Цитата:
mklink /d "C:\Tomb Raider. Anniversary" "N:\Tomb Raider. Anniversary"

— на диске С: будет создана папка "Tomb Raider. Anniversary", которая будет представлять из себя ссылку на папку "N:\Tomb Raider. Anniversary".

Всего записей: 585 | Зарегистр. 16-09-2010 | Отправлено: 15:40 28-01-2022
Pasha_ZZZ



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Susie7
Far Manager - Alt+F6...

Всего записей: 10881 | Зарегистр. 11-03-2002 | Отправлено: 15:45 28-01-2022
insorg



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть примерно такое
Код:
@echo [1] Install program 1
@echo [2] Install program 2
<....>
@echo [9] Install program 9
@echo [A] Install program A
<....>
@echo [M] Install program 2
@echo [N] Install program 2
@set /p UserJob=Select the job:  
Дальше идёт работа с переменной зависимо от тыкнутой буковки. При этом буковка у нас только одна, а утилиту Choice.exe мы использовать не можем (батник для ХР, там её нет).
Каким однострочником можно явно указать, чтобы батник прекратил работу, если значение переменной не является одним из указанных? Например, юзер ткнул русскую буковку или всякие там точки/тире и т.д., что явно отсутствует в списке.

Всего записей: 2956 | Зарегистр. 04-11-2010 | Отправлено: 23:19 28-01-2022
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
insorg
Хорошо - никак. Плохо вот так:

Код:
 
set JobList=1 2 9 A M N
setlocal enabledelayedexpansion
if !JobList!==!JobList:%UserJob%=! echo Invalid job
endlocal
 

Попробуйте ввести "!".
 
Лаконичность кода не должна быть самоцелью.

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

Всего записей: 3483 | Зарегистр. 18-04-2005 | Отправлено: 23:59 28-01-2022
insorg



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
О_о
 
В батниках можно загонять переменки в "!" ?
Можно кинуть в меня мануалом, что оно ещё умеет?

Всего записей: 2956 | Зарегистр. 04-11-2010 | Отправлено: 00:06 29-01-2022
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru