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

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

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

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

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

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Дано:
 
переменная
 
Set A=ABC=DEF=GHI=JKL
 
Есть ли простой (то есть без перебирания посимвольно) способ убрать/заменить из переменной знаки = ?

Всего записей: 55 | Зарегистр. 30-03-2017 | Отправлено: 16:57 15-11-2020 | Исправлено: A27, 17:19 15-11-2020
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A27
Смотря что вы подразумеваете под простым способом.
 
Добавлено:

Цитата:
без перебирания посимвольно

Нет.

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

Всего записей: 2988 | Зарегистр. 18-04-2005 | Отправлено: 17:21 15-11-2020
older

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
через внешние утилиты, например:

Код:
echo %A%|sed "s/=//g"

Всего записей: 304 | Зарегистр. 15-02-2003 | Отправлено: 20:13 15-11-2020
Krabo_Torm

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Покажите - как из батника в файле prov.txt в строке начинающейся с LastAppDir= удалить всё справа после LastAppDir=. С помощью sed?

Всего записей: 17 | Зарегистр. 11-03-2018 | Отправлено: 11:22 17-11-2020
khasia



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

Цитата:
@echo off
pushd "%~dp0"  
set "file=Prov.txt"
 
for /f "delims=" %%i in ('"type "%file%"& del "%file%""') do (
 for /f "delims==" %%j in ("%%i") do ((
  for /f "delims=" %%k in ('
   "if %%j==LastAppDir echo LastAppDir="
  ') do echo %%k
  )|| echo.%%i
  )>>"%file%"
 )
 
exit /b

Всего записей: 2244 | Зарегистр. 18-02-2010 | Отправлено: 12:08 17-11-2020
los

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

Цитата:
Покажите - как из батника в файле prov.txt...

где взять этот файл?

Всего записей: 3593 | Зарегистр. 08-09-2001 | Отправлено: 13:07 17-11-2020
Krabo_Torm

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
los
А где угодно - хоть придумать, это мне для примера. Ну вот так например:
prov.txt:

Код:
LastVersion=52.9.0_20201113025612/20201113025612
LastOSABI=WINNT_x86-msvc
LastPlatformDir=C:\Set\Brausers\Basilisk
LastAppDir=C:\Set\Brausers\Basilisk\browser

 
khasia
Здорово! Без всяких приблуд, снимаю шляпу Спасибо!

Всего записей: 17 | Зарегистр. 11-03-2018 | Отправлено: 14:30 17-11-2020 | Исправлено: Krabo_Torm, 14:35 17-11-2020
A27

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

Код:
SetLocal EnableDelayedExpansion
For /f "UseBackQ Eol=` Tokens=1" %%A in ("Black List.txt") do (
Set/a A+=1
Set B=!A!
For /f "UseBackQ Eol=` Skip=!A! Tokens=1" %%B in ("Black List.txt") do Set/a B+=1 & If %%A.==%%B. (

 
при выполнении ругается
 

Код:
!A! Tokens=1" was unexpected at this time.
!A! Tokens=1" was unexpected at this time.
!A! Tokens=1" was unexpected at this time.
!A! Tokens=1" was unexpected at this time.
!A! Tokens=1" was unexpected at this time.
...
 

 
если во втором For заменить !A! на числовое значение, то отрабатывает без ошибок, естественно только статически заданное в Skip= значение.
 
В чём проблема? Вложенные циклы не могут принимать "динамические" параметры?

Всего записей: 55 | Зарегистр. 30-03-2017 | Отправлено: 18:19 17-11-2020
GCRaistlin



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

Цитата:
Вложенные циклы не могут принимать "динамические" параметры?

Не могут.

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

Всего записей: 2988 | Зарегистр. 18-04-2005 | Отправлено: 18:25 17-11-2020
A27

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Что за нелепое ограничение? Вот так, между прочим, работает:
 

Код:
For /l %A in (1,1,10) do @For /l %B in (%A,1,10) do @Echo.[%A][%B]

 
а так нет:
 

Код:
For /l %A in (1,1,10) do @For /f "Skip=%A Tokens=*" %B in (List.txt) do @Echo.[%A][%B]

 
Получается, зачем-то урезали For с ключом /f.

Всего записей: 55 | Зарегистр. 30-03-2017 | Отправлено: 18:32 17-11-2020 | Исправлено: A27, 19:06 17-11-2020
GCRaistlin



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

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

Всего записей: 2988 | Зарегистр. 18-04-2005 | Отправлено: 18:40 17-11-2020
YuS 2



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

Цитата:
а так нет:

GCRaistlin

Цитата:
Не могут.

Могут.

Цитата:
их нельзя передать ни через FOR-переменную, ни через !-переменную.

CMD рожден был для извращений (ну, или извращенцами)...
Так можно:

Код:
For /l %A in (1,1,10) do @cmd /c For /f "Skip=%A Tokens=*" %B in (List.txt) do @Echo.[%A][%B]

Всего записей: 3190 | Зарегистр. 03-02-2009 | Отправлено: 09:11 18-11-2020 | Исправлено: YuS 2, 09:27 18-11-2020
GCRaistlin



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

Цитата:
Могут.

У вас не вложенный цикл.

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

Всего записей: 2988 | Зарегистр. 18-04-2005 | Отправлено: 10:51 18-11-2020
YuS 2



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

Цитата:
не вложенный цикл.

а какой? независимый?
То, что он выполняется в отдельном процессе, не делает его НЕ вложенным...
Впрочем, как обычно...  
Спор, ради спора, мне не интересен, важен результат.

Всего записей: 3190 | Зарегистр. 03-02-2009 | Отправлено: 11:11 18-11-2020 | Исправлено: YuS 2, 11:15 18-11-2020
GCRaistlin



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

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

Всего записей: 2988 | Зарегистр. 18-04-2005 | Отправлено: 11:36 18-11-2020
Inoz2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это банальный запуск приложения cmd.exe с параметром %a в командной строке. На месте cmd может быть всё, что ваша фантазия позволит. И нет никакого вложенного цикла.

----------
Мы все умрём. (-:

Всего записей: 3333 | Зарегистр. 23-04-2009 | Отправлено: 13:02 18-11-2020 | Исправлено: Inoz2000, 13:03 18-11-2020
kot1313



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

Всего записей: 2305 | Зарегистр. 11-12-2002 | Отправлено: 14:01 18-11-2020 | Исправлено: kot1313, 19:26 21-01-2021
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kot1313
Давайте лучше научим вас how to fish, вместо того чтобы давать рыбу. Итак. Пишем батник:

Код:
 
@echo %1
@pause
 

Перетягиваем на него папку. Смотрим, что батник выдал, и думаем, как можно применить этот подход к вашему.

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

Всего записей: 2988 | Зарегистр. 18-04-2005 | Отправлено: 14:12 18-11-2020
kot1313



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

Всего записей: 2305 | Зарегистр. 11-12-2002 | Отправлено: 14:28 18-11-2020 | Исправлено: kot1313, 19:26 21-01-2021
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kot1313
FOR /?, см. в конце

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

Всего записей: 2988 | Зарегистр. 18-04-2005 | Отправлено: 14:49 18-11-2020
Открыть новую тему     Написать ответ в эту тему

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

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