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

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

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

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

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



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
При этом дальше в батнике используется
Код:
echo.Width = %CurrentHorizontalResolution%
echo.Height = %CurrentVerticalResolution%
Получается, что # принимает значение получаемого параметра?

Всего записей: 15143 | Зарегистр. 04-11-2010 | Отправлено: 12:58 23-09-2023
GCRaistlin



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

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

%1 выбран для простоты. В реальной жизни не следует делать ни так, ни как у вас, потому что %1 может быть равен, напр., "&.
 

Цитата:
Распознаёт как отрицательное 32-битное -2147483648, но не распознаёт -0x80000000

Похоже, в SET используются разные представления отрицательных чисел: обратный код для восьмеричных и десятичных и дополнительный для шестнадцатиричных. А в IF - дополнительный код для всех. Поэтому:

Код:
 
set Arg=%1
setlocal enabledelayedexpansion
(if !Arg!==-2147483648 call) && (if !Arg!==-020000000000 call) && (
  if !Arg! geq -2147483648 if !Arg! leq 0 echo Negative
)
 

А еще правильнее - так:

Код:
 
set Arg=%1
setlocal enabledelayedexpansion
for /f "delims=" %%A in ("!Arg!") do (
  endlocal
  (if %%A==-2147483648 call) && (if %%A==-020000000000 call) || set Arg=0x80000000
  if %%A geq -2147483648 if %%A leq 0 echo Negative
)
 

 
Добавлено:
Pasha_ZZZ
insorg
https://stackoverflow.com/questions/8520313/windows-batch-script-to-parse-csv-file-and-output-a-text-file/8520993#8520993

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

Всего записей: 3951 | Зарегистр. 18-04-2005 | Отправлено: 13:53 23-09-2023
GCRaistlin



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

Цитата:
как отрицательное ... не распознаёт -0x80000000

Так и правильно - это скорее SET его некорректно считает отрицательным (и равным 0x80000000).
 
IF тоже не без косяков:
Подробнее...
 
Отсюда следует, что как минимум использования операторов lss и leq нужно избегать. А вообще, вот код сравнения с обходом всех найденных so far багов IF (с изменением значений входных переменных - переводом сравниваемых чисел в десятичный вид):

Код:
 
set D=%1
set B=%2
setlocal enabledelayedexpansion || exit /b
if defined O set O=
for /f "tokens=1-2" %%A in ("!D! !B!") do (
  (if !D! gtr 0 if !B! lss 0 set O=^>& call) && (
    if !D! lss 0 if !B! gtr 0 set O=^<& call
  ) && (
    (if !D!==-2147483648 call) && (if !D!==-020000000000 call) || set D=0x80000000
    (if !B!==-2147483648 call) && (if !B!==-020000000000 call) || set B=0x80000000
  ) && (
    if !D!==0x80000000 if not !B!==0x80000000 set O=^<& call
  ) && (
    if !B!==0x80000000 if not !D!==0x80000000 set O=^>& call
  ) && (
    if !D! gtr !B! (set O=^>) else (
      if !D! equ !B! (set O==) else set O=^<
    )
  )
  for /f %%C in ("!O!") do (
    endlocal
    2>nul (set /a D=%%A,B=%%B) && (
      if %%A==-0x80000000 call
    ) && (
      if %%B==-0x80000000 call
    ) && (
      if _ neq _!! setlocal enabledelayedexpansion & call
      (if %%C=== (
        if not !D!==!B! (
          if errorlevel 1 endlocal
          call
        )
      )) && (
        echo !D! %%C !B!
        if errorlevel 1 endlocal
      )
    ) || echo Invalid number.
  )
)
 


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

Всего записей: 3951 | Зарегистр. 18-04-2005 | Отправлено: 04:31 24-09-2023
GCRaistlin



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

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

Всего записей: 3951 | Зарегистр. 18-04-2005 | Отправлено: 13:50 26-09-2023
DeZz



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
GCRaistlin
а по моему вопросу, случайно, нет идей?

Всего записей: 1140 | Зарегистр. 23-01-2006 | Отправлено: 14:33 26-09-2023
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DeZz
Код для вычисления разницы между двумя датами (работает в основном неправильно!):  

Код:
 
:DaysBetween <date1> <date2>
rem v2023-09-26_1
rem Помещает разницу в днях между датами в формате dd.mm.yyyy в переменную DaysBetween.
rem https://stackoverflow.com/questions/12862226/the-implementation-of-calculating-the-number-of-days-between-2-dates
set Date1=%1
set Date2=%2
setlocal enabledelayedexpansion || goto _Exit
(for /f "delims=. tokens=1-3" %%A in ("!Date1!") do (
  for /f "delims=. tokens=1-3" %%D in ("!Date2!") do (
    set Day1=%%A
    set Day2=%%D
    set Month1=%%B
    set Month2=%%E
    set Year1=%%C
    set Year2=%%F
  )
)) || (echo Error& exit /b)
for %%A in (1 2) do (
  set /a Month%%A=(Month%%A+9^)%%12,Year%%A=Year%%A-Month%%A/10,^
    N%%A=365*Year%%A+Year%%A/4-Year%%A*100+Year%%A*400+(Month%%A*306+5^)/10+(Day%%A-1^)
)
set /a DaysBetween=N2-N1
for /f "delims=" %%A in ("!DaysBetween!") do (
  endlocal
  echo %%A
  set DaysBetween=%%A
)
exit /b
 

Остальное сравнительно просто.

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

Всего записей: 3951 | Зарегистр. 18-04-2005 | Отправлено: 16:39 26-09-2023 | Исправлено: GCRaistlin, 15:39 27-09-2023
vaskamy



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

Код:
@echo off
set "ffmpeg=D:\ffmpeg\bin"
path %path%;%ffmpeg%
ffmpeg -i "%1" -i "Cover.jpg" -map 1 -map 0 -c copy -disposition:0 attached_pic "%1.mp4"
pause


Код:
-i "Cover.jpg"

кто нибудь знает какую суда переменную прописать чтоб использовать изображение с любым именем а не фиксированным.

Всего записей: 964 | Зарегистр. 04-03-2017 | Отправлено: 22:05 26-09-2023
Simple Code

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

Цитата:
кто нибудь знает какую суда переменную прописать чтоб использовать изображение с любым именем а не фиксированным.

Если имеется ввиду рандомное имя:
ffmpeg -i "%1" -i "%random%.jpg" -map 1 -map 0 -c copy -disposition:0 attached_pic "%1.mp4"

Всего записей: 144 | Зарегистр. 19-11-2022 | Отправлено: 12:16 27-09-2023
vaskamy



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

Цитата:
Если имеется ввиду рандомное имя:
ffmpeg -i "%1" -i "%random%.jpg" -map 1 -map 0 -c copy -disposition:0 attached_pic "%1.mp4"

Не поджодит:

Всего записей: 964 | Зарегистр. 04-03-2017 | Отправлено: 12:45 27-09-2023
GCRaistlin



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vaskamy
А ffmpeg.exe это:

Цитата:
 изображение с любым именем а не фиксированным

в принципе поддерживает?

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

Всего записей: 3951 | Зарегистр. 18-04-2005 | Отправлено: 12:56 27-09-2023
virjokk

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vaskamy
Ну тогда пишите это имя просто вторым параметром батника:
Код:
-i "%2.jpg"

Всего записей: 281 | Зарегистр. 19-05-2006 | Отправлено: 13:16 27-09-2023
Simple Code

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vaskamy
На скриншоте написано же, что нет такого файла и соответственно не может открыть его. Возможно синтаксис не правильный...
 
Error opening input: No such file or directory  
Error opening input file 2780.jpg.
Error opening input files: No such file or directory
 
Ошибка открытия ввода: нет такого файла или каталога.
Ошибка открытия входного файла 2780.jpg.
Ошибка открытия входных файлов: нет такого файла или каталога.

Всего записей: 144 | Зарегистр. 19-11-2022 | Отправлено: 13:21 27-09-2023
virjokk

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

Цитата:
Код для вычисления разницы между двумя датами

А как правильно этим пользоваться? Поместил ваш код в батник, запустил:
DaysBetween.bat 27.09.2022 27.09.2023
Результат 665, что явно отличается от ожидаемого

Всего записей: 281 | Зарегистр. 19-05-2006 | Отправлено: 14:10 27-09-2023
vaskamy



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

Цитата:
Ну тогда пишите это имя просто вторым параметром батника:
Код:
-i "%2.jpg"


Код:
@echo off
set "ffmpeg=D:\ffmpeg\bin"
path %path%;%ffmpeg%
ffmpeg -i "%1" -i "%2.jpg" -map 1 -map 0 -c copy -disposition:0 attached_pic "%1.mp4"
pause

Не работает.
 
 
Добавлено:

Цитата:
-i "Cover.jpg"

Сюда нужна переменная но ни одна не работает, возможно это особенность ffmpeg.

Всего записей: 964 | Зарегистр. 04-03-2017 | Отправлено: 14:15 27-09-2023
virjokk

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

Всего записей: 281 | Зарегистр. 19-05-2006 | Отправлено: 14:22 27-09-2023
vaskamy



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

Цитата:
Вы запускаете батник с одним параметром - именем обрабатываемого файла, а я предлагаю вторым параметром указывать имя и путь файла обложки, при этом этот файл должен реально находится по указанному пути

Они и находятся в одной папке, только если изменить имя картинки на отличающееся от имени прописанного в коде - перестаёт работать.

Всего записей: 964 | Зарегистр. 04-03-2017 | Отправлено: 14:38 27-09-2023
ziabriev



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

Цитата:
Сюда нужна переменная но ни одна не работает, возможно это особенность ffmpeg.
 

А так?
 Консольная программа со строкой из буфера обмена:
 

Код:
::Копируется значение в буфера обмена и записывается подходящее имя_переменной:
for /f "delims=" %%i in ('mshta "javascript:var x=clipboardData.getData('text');if(x) new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(x);close();"') do set suitablevarname=%%i
 
::Выполнение консольной программы со строкой из буфера обмена:
console_prog.exe --%suitablevarname%
 
exit/b
 


Всего записей: 1297 | Зарегистр. 03-03-2019 | Отправлено: 14:50 27-09-2023
Simple Code

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

Цитата:
только если изменить имя картинки на отличающееся от имени прописанного в коде - перестаёт работать.

Желательно, чтоб в папке находилась одна картинка и батник в этой же папке.

Код:
 
for %%i in (%~dp0*.*) do (
    if /i "%%~xi"==".png" set "pic=%%~dpnxi"
    if /i "%%~xi"==".jpg" set "pic=%%~dpnxi"
)
ffmpeg -i "%1" -i "%pic%" -map 1 -map 0 -c copy -disposition:0 attached_pic "%1.mp4"
 

Всего записей: 144 | Зарегистр. 19-11-2022 | Отправлено: 15:02 27-09-2023 | Исправлено: Simple Code, 15:06 27-09-2023
vaskamy



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

Цитата:
Желательно чтоб в папке находилась одна картинка.
 
Код:
 
for %%i in (%~dp0*.*) do (
    if /i "%%~xi"==".png" set "pic=%%~dpnxi"
    if /i "%%~xi"==".jpg" set "pic=%%~dpnxi"
)
ffmpeg -i "%1" -i "%pic%" -map 1 -map 0 -c copy -disposition:0 attached_pic "%1.mp4"
 
 

 
Работает чётко, я даже картинку именовал символами.
Большое спасибо за помощь вы первый смогли разрешить этот ребус. Даже в чате ffmpeg ни кто не смог. На иностранных сайтах я находил что это не решаемо.

Всего записей: 964 | Зарегистр. 04-03-2017 | Отправлено: 15:15 27-09-2023
GCRaistlin



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

Цитата:
DaysBetween.bat 27.09.2022 27.09.2023
Результат 665, что явно отличается от ожидаемого

Действительно. Тогда разбираться надо - алгоритм не мой.

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

Всего записей: 3951 | Зарегистр. 18-04-2005 | Отправлено: 15:28 27-09-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

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