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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189

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

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

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

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

Цитата:
то в последних версиях вот это "?r=число" обрезается

curl параметры https://domain.com/123/456/test.php?r=1
Нужно брать ссылку в кавычки
curl параметры "https://domain.com/123/456/test.php?r=1"
Возможно дело в кавычках и в вашей конструкции.
 
fscpsd

Цитата:
где не бывает ни обратных кавычек, ни пробелов

пробелы бывают и достаточно часто.

Всего записей: 7334 | Зарегистр. 08-09-2001 | Отправлено: 10:11 19-02-2023
fscpsd



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Inoz2000
Цитата:
"delims=" задаёт отсутствие разделителя  
И "delims="" " тоже задаёт отсутствие разделителя. В том куске коде, который я цитировал:
Цитата:
"usebackq delims="" "
— delims как раз и будет задавать отсутствие разделителя, так что вроде бы нет ошибки у меня.
 
Добавлено:
los
Цитата:
пробелы бывают и достаточно часто
Если не ошибаюсь, там не те буквальные пробелы, которые может увидеть цикл for, там спецсимволы же вроде какие-то. Вот здесь например почитать можно:
https://stackoverflow.com/questions/5442658/spaces-in-urls
 
Добавлено:
Pasha_ZZZ
Цитата:
Это конструкция Фар менеджера, значит полный путь к файлу с учетом символических ссылок
Спасибо! Если вдруг кому-нибудь ещё это интересно, то вот тут это вкратце объясняется:  
https://documentation.help/Far-Manager-ru/MetaSymbols.html

Всего записей: 1823 | Зарегистр. 16-09-2010 | Отправлено: 10:13 19-02-2023
skipik



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

Цитата:
В каждой строке ссылка - и все? Ничего убирать из нее не надо?

Да. Причём спотыкается только на txt-файлах, содержащих вот такие ссылки:
...
https://domain.com/123/456/test.php?r=1
...
А на обычных традиционных прямых ссылках на архивы\бинарники -- всё ок.
 
И началось это после одного из последних обновлений cURL, который я беру отсюда https://curl.se/
То есть, если взять и вернуть например версию 7.76.1 (с того же сайта), то вновь всё нормализуется, включая пример выше. Ошибок вообще нет.

 
GCRaistlin

Цитата:
Какие разделители вы задаете этими параметрами?

Затрудняюсь ответить, ибо как верно подметил Inoz2000, я заимствовал данную конструкцию у Victor_VG. И повторюсь, что до определённого времени всё действительно работало.
 
// upd
 
Pasha_ZZZ
> В данном случае лучше использовать wget -i путь_к_файлу-списку
Видимо, так и поступлю, спасибо!

Всего записей: 4807 | Зарегистр. 07-07-2006 | Отправлено: 11:40 19-02-2023 | Исправлено: skipik, 13:08 19-02-2023
Pasha_ZZZ



Запрет на пост
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
skipik
В данном случае лучше использовать wget -i путь_к_файлу-списку

Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 11:50 19-02-2023
GCRaistlin



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

Цитата:
"delims="" " тоже задаёт отсутствие разделителя.

Это не документировано и работает довольно криво:

Код:
 
for /f "delims="" usebackq" %%A in ("foobar") do ...
 

и

Код:
 
for /f "usebackq delims="" " %%A in ("foobar") do ...
 

дают разные результаты.
В общем, писать так не стоит.

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

Всего записей: 3991 | Зарегистр. 18-04-2005 | Отправлено: 12:52 19-02-2023
Pasha_ZZZ



Запрет на пост
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
skipik
И вообще, сначала лучше заюзать !& чтобы можно было выделить несколько файлов

Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 14:17 19-02-2023
fscpsd



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

Код:
for /f "delims="" usebackq" %%A in ("foobar") do ...
и
Код:
for /f "usebackq delims="" " %%A in ("foobar") do ...
дают разные результаты.
Можно конкретный пример?
 
Pasha_ZZZ
Цитата:
заюзать !& чтобы можно было выделить несколько файлов
Это как?

Всего записей: 1823 | Зарегистр. 16-09-2010 | Отправлено: 11:24 20-02-2023 | Исправлено: fscpsd, 11:25 20-02-2023
Pasha_ZZZ



Запрет на пост
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
fscpsd
В Фаре данная конструкция раскрывается в список выделенных на панели файлов

Всего записей: 12396 | Зарегистр. 11-03-2002 | Отправлено: 11:29 20-02-2023
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fscpsd
Подставьте вместо многоточия "echo %%A".

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

Всего записей: 3991 | Зарегистр. 18-04-2005 | Отправлено: 11:31 20-02-2023
fscpsd



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Pasha_ZZZ
Понял, спасибо.
 
GCRaistlin
Так ведь эта разница получается исключительно из-за usebackq, разве нет? Вроде бы "delims="" " ни при чём здесь.

Всего записей: 1823 | Зарегистр. 16-09-2010 | Отправлено: 11:41 20-02-2023
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fscpsd
Порядок параметров не должен иметь значения. А имеет.

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

Всего записей: 3991 | Зарегистр. 18-04-2005 | Отправлено: 11:48 20-02-2023
B_P0T_MHE_H0ru

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите как под DOS написать:
IF  %data% > 2000 format c:
IF %data% < 1999 format d:
LSS, LEQ, NEQ и т.п. под DOS не работают я так понимаю

Всего записей: 200 | Зарегистр. 15-10-2022 | Отправлено: 15:12 20-02-2023
ewild

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

Цитата:
LSS, LEQ, NEQ и т.п.

 
Related commands
EQU: https://ss64.com/nt/equ.html
GEQ: https://ss64.com/nt/geq.html
GTR: https://ss64.com/nt/gtr.html
LEQ: https://ss64.com/nt/leq.html
LSS: https://ss64.com/nt/lss.html
NEQ: https://ss64.com/nt/neq.html
IF command: https://ss64.com/nt/if.html
 

Код:
@echo off
set data=500
if %data% GTR 2000 echo data is %data% so formatting c:
if %data% LSS 1999 echo data is %data% so formatting d:

it works like a charm
 
Edit: for actual MS-DOS (v6.22, v7.10):

Код:
c:\>help if

 
MS-DOS Command: IF

Код:
Performs conditional processing in batch programs.
 
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
 
  NOT               Specifies that DOS should carry out the command only if the condition is false.
 
  ERRORLEVEL number Specifies a true condition if the last program run returned  
                                       an exit code equal to or greater than the number  specified.
 
  string1==string2  Specifies a true condition if the specified text strings match.
 
  EXIST filename     Specifies a true condition if the specified filename exists.
 
  command           Specifies the command to carry out if the condition is met.
                           Command can be followed by ELSE command which will execute the command
                           after the ELSE keyword if the specified condition is FALSE

Всего записей: 1195 | Зарегистр. 13-08-2005 | Отправлено: 20:35 20-02-2023 | Исправлено: ewild, 22:44 20-02-2023
B_P0T_MHE_H0ru

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ewild
Спасибо. Пробовал я. Пишет ошибка синтаксиса, а под win нормально.

Всего записей: 200 | Зарегистр. 15-10-2022 | Отправлено: 20:38 20-02-2023
El Sanchez



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

Цитата:
Порядок параметров не должен иметь значения. А имеет.

GCRaistlin, не имеет.

Цитата:
Это не документировано и работает довольно криво:  
for /f "delims="" usebackq" %%A in ("foobar") do ...  
for /f "usebackq delims="" " %%A in ("foobar") do ...  

GCRaistlin, в первом случае разбор закончится ещё до usebackq, т.к. после delims= стоит конечный символ равный стартовому - ".
1. "delims="" usebackq"
2. "usebackq delims="" "
Красная часть в разборе параметров не участвует и может быть использована как комментарий например. for /f "delims=;""There are three delimiters: ""space"", ""tab"" and ""semicolon"" symbols" %%A in ("foobar") do ...

Цитата:
 я заимствовал данную конструкцию у Victor_VG

skipik, так правильно:
@for /f "usebackq" %A in ("!=\!.!") do "%FARHOME%\curl.exe" -C - -LRZO "%A".
 

Всего записей: 467 | Зарегистр. 23-12-2008 | Отправлено: 21:05 20-02-2023
GCRaistlin



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

Цитата:
Красная часть в разборе параметров не участвует и может быть использована как комментарий например. for /f "delims=;""There are three delimiters: ""space"", ""tab"" and ""semicolon"" symbols" %%A in ("foobar") do ...

Любопытно, спасибо. Хотя практическая применимость сомнительна.
Кстати, на самом деле в вашем примере delimiter всего один.
 
Добавлено:
B_P0T_MHE_H0ru

Цитата:
под win нормально

Требуют включенных Command Extensions, что возможно только начиная с Windows NT 4.0.

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

Всего записей: 3991 | Зарегистр. 18-04-2005 | Отправлено: 23:35 20-02-2023
El Sanchez



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

Цитата:
Кстати, на самом деле в вашем примере delimiter всего один.

GCRaistlin, да, верно, разделители по умолчанию переназначаются на пользовательские. Кстати, стартовым/конечным символом может быть и одинарная кавычка, а не двойная, видимо на случай задания двойной кавычки как разделителя в delims. Но увы, разбор поломается ещё на этапе разделки комстроки на куски.

Всего записей: 467 | Зарегистр. 23-12-2008 | Отправлено: 12:46 21-02-2023
GCRaistlin



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

Цитата:
стартовым/конечным символом может быть и одинарная кавычка, а не двойная, видимо на случай задания двойной кавычки как разделителя в delims. Но увы, разбор поломается ещё на этапе разделки комстроки на куски.

Поясните, пож., на примере.

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

Всего записей: 3991 | Зарегистр. 18-04-2005 | Отправлено: 12:56 21-02-2023
Inoz2000



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
El Sanchez
см. сюды  -->

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

Всего записей: 4904 | Зарегистр. 23-04-2009 | Отправлено: 12:59 21-02-2023 | Исправлено: Inoz2000, 12:59 21-02-2023
El Sanchez



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

Цитата:
Поясните, пож., на примере.

GCRaistlin, такая конструкция была бы возможна без всяких хаков с ^.
for /f 'usebackq delims="' %a in ('foo""bar""baz') do ...

Цитата:
см. сюды

Inoz2000, хак, после первичного разбора, где полная комстрока разбивается на составляющие, на вход парсеру будет подана строка tokens=1,3 delims=". Первый символ t - стартовый - не равен " или ', поэтому останов разбора будет произведён не на " или ', а на нулевом символе, т.е. до конца строки. Псевдокод выбора стартового/стопового символа в cmd такой.
 

Всего записей: 467 | Зарегистр. 23-12-2008 | Отправлено: 16:02 21-02-2023
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189

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


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru