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

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

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

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

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

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите!
Простенький набор команд
(выдает список названий папок в текущей директории)
 
for /f %%D in ('dir /b /a:d 2^>nul') Do (  
 set otg=%%D
 echo %otg%
pause
 )
 
не срабатывает set otg=
echo постоянно выдает один и тот же результат, не обновляется переменная

Всего записей: 288 | Зарегистр. 06-11-2004 | Отправлено: 23:14 15-06-2021
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ERG73
set /? (третий экран).

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

Всего записей: 3086 | Зарегистр. 18-04-2005 | Отправлено: 23:38 15-06-2021
Fenrizz



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ERG73
Setlocal EnableDelayedExpansion
 
https://ss64.com/nt/delayedexpansion.html

Всего записей: 410 | Зарегистр. 12-09-2017 | Отправлено: 12:25 16-06-2021 | Исправлено: Fenrizz, 12:25 16-06-2021
uzeerpc



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Выделено отсюда, спасибо тем кто откликнется!

Всего записей: 987 | Зарегистр. 09-01-2016 | Отправлено: 13:35 16-06-2021
kraeved



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ERG73
Держите три способа исправить ситуацию с переменной в цикле.
 
 

Всего записей: 838 | Зарегистр. 01-03-2003 | Отправлено: 15:46 16-06-2021 | Исправлено: kraeved, 03:42 17-06-2021
ERG73

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

Всего записей: 288 | Зарегистр. 06-11-2004 | Отправлено: 15:51 16-06-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
опять запутался в кодировках. использование команды echo.>>txt.txt
приводит к какому то кривому символу, так что результирующий файл
неправильный получается. как перенос строки другой напечатать?
печать идет в файл UTF-8

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 19:29 16-06-2021
bomzz

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

Цитата:
.\bin\AkelPad.exe /Show(0) /OpenFile("File1.txt",1251,-1) /SaveFile("File2.txt",65001,-1) /Command(4109)

еще один способ сконвертировать файл. кривопад пригодился

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 14:50 17-06-2021 | Исправлено: bomzz, 14:51 17-06-2021
kraeved



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 
 
          Когда вы пишите сюда, то десятки, если не сотни людей, получают оповещение.
          А вы пробовали взглянуть на написанное глазами этих самых читающих людей?
          Сообщения уже напоминают бормотание под нос: слова по отдельности понятны,
          а в сумму никак не складываются. Свистопляска кодировок, вложенность путей,
          сравнение со спецсимволами и пустотами… Отсюда возникает стойкое ощущение,
          что вы пытаетесь забивать гвозди микроскопом, т.е. от незнания всё усложняете
          и приглашаете плутать в лабиринте, тогда как возможно более простое решение.
          Поэтому ставьте задачу целиком: дано то-то, требуется то-то, пытаюсь то-то.
 
          Скажем, если надо убрать красный цвет из конкретных субтитров под Windows XP,
          то так и пишите, вот истинная задача! А вы зовёте бесплодно плутать в лабиринте:
          «Как приспособить регэксп (?:<font.*?red.*?>)(.*?)(?:</font>) для findstr

Всего записей: 838 | Зарегистр. 01-03-2003 | Отправлено: 16:37 17-06-2021 | Исправлено: kraeved, 11:36 21-06-2021
bomzz

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

Цитата:
echo Y|start /wait make1.bat 1 > 1.txt 2>&1
FOR /F "tokens=* USEBACKQ" %%F IN (`start /wait make1.bat 1 2^>^&1`) DO SET var=%%F

 

Цитата:
@echo off
color 9F
if "%1" neq "" goto :curl
cd /d %~dp0
echo %time%
:: echo Y|start /wait make1.bat 1 > 1.txt 2>&1
FOR /F "tokens=* USEBACKQ" %%F IN (`start /wait make1.bat 1 2^>^&1`) DO SET var=%%F  
if "%var%" neq "" echo 11111
PAUSE & goto :eof
 
:curl
echo %time%
pause
exit

 
Подробнее...
 
curl, консольная утилита для интернета, видимо скачивает не отдельным трендом,
а в контексте основного потока. скорее всего поэтому при фатальных сбоях связи,
а может и ошибках, которые оно не может обработать, консоль вообще вылетает.
что приводит к остановке батника, так как curl использует ту же консоль.
если запустить curl второй консолью, то в первом основном батнике все
же можно получить информацию о фатальных сбоях вот таким образом.
в примере на видео закрытие окна крестиком приводит к выводу буквы С.
если второй батник закрыть "штатно", нажав паузу ничего не выводиться.
то есть кроме имени окна и буфера обмена есть все же способ передать информацию
из одной консоли в другую.

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 03:55 19-06-2021 | Исправлено: bomzz, 16:38 19-06-2021
kraeved



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

Всего записей: 838 | Зарегистр. 01-03-2003 | Отправлено: 02:48 20-06-2021 | Исправлено: kraeved, 10:50 20-06-2021
bomzz

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

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 04:54 20-06-2021 | Исправлено: bomzz, 05:06 20-06-2021
older

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как вариант, через call запустить второй батник и в качестве параметра передать ему, все что захотите
да и через start все можно так же сделать, я думаю
но через call, видимо, будет правильней, потому что и переменные окружения должны сохраниться

Всего записей: 310 | Зарегистр. 15-02-2003 | Отправлено: 07:22 20-06-2021 | Исправлено: older, 07:26 20-06-2021
bomzz

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

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 08:14 20-06-2021 | Исправлено: bomzz, 09:15 20-06-2021
older

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
start "" script.bat "всякие разные параметры"

Всего записей: 310 | Зарегистр. 15-02-2003 | Отправлено: 15:15 20-06-2021
bomzz

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

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 16:59 20-06-2021
Fenrizz



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

Цитата:
echo Y|start /wait make1.bat 1 > 1.txt 2>&1
FOR /F "tokens=* USEBACKQ" %%F IN (`start /wait make1.bat 1 2^>^&1`) DO SET var=%%F  

Если вывод файла make1.bat соcтоит из нескольких строк, то в переменной var сохранится только последняя.
Соответственно, надо или добавить ^| FIND "SOMETHING"
или добавлять новые строки к переменной, а не перезаписывать её

Код:
 
setlocal EnableDelayedExpansion  
set ^"NL=^
%= This creates a Line Feed character =%
^"
FOR /F "tokens=* USEBACKQ" %%F IN (`start /wait make1.bat 1 2^>^&1`) DO SET var=!var!!NL!%%F  
 

Всего записей: 410 | Зарегистр. 12-09-2017 | Отправлено: 17:16 20-06-2021 | Исправлено: Fenrizz, 18:33 20-06-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Fenrizz
из второй консоли возвращается только прерывание контрал С и то только потому, что в очереди Y или ожидание.
 
Добавлено:
батник запускает сам себя но в другом экземпляре интерпретатора
глобальные переменные устанавливаются записью в реестр

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 19:30 20-06-2021 | Исправлено: bomzz, 19:32 20-06-2021
older

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

bomzz (09:59 20-06-2021)
Цитата:
туда можно что угодно, оттуда никак

 
вот поэтому и нужно пользоваться командой call
 
например, первый батник:

Код:
@echo off
cd /d "%~dp0"
set "prob=qwerty"
call #.cmd
set prob
pause

 
и второй батник (доустим #.cmd):

Код:
@echo off
cd /d "%~dp0"
set prob
pause
set "prob=1234567"

 
запусти первый батник, а после паузы продолжи выполнение
вот и назад из второго в первый батник все получил

Всего записей: 310 | Зарегистр. 15-02-2003 | Отправлено: 22:46 20-06-2021
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
older
если бы можно было использовать call я бы использовал. но нужен start /wait
потому что запускается сторонняя консольная утилита в собственную консоль
 
findstr принципиально с русским текстом работать не хочет?
а есть какая то замена для разбора строк? утилита типа

Всего записей: 3069 | Зарегистр. 29-03-2016 | Отправлено: 03:17 21-06-2021 | Исправлено: bomzz, 06:13 21-06-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

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