<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; CMD/BAT]]></title>
		<link>https://forum.script-coding.com/index.php</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;fid=18&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние темы раздела «Серый форум».]]></description>
		<lastBuildDate>Fri, 19 Dec 2025 21:58:39 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[CMD/BAT: Автоматическое создание Proxy-файлов видео для Vegas]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18536&amp;action=new</link>
			<description><![CDATA[<p><strong>Автоматическое создание Proxy-файлов видео с камеры DJI Osmo Action 5 Pro для Vegas</strong></p><p>Камера <strong>DJI Osmo Action 5 Pro</strong> кроме оригинального видео также создает файл с расширением <strong>.LRF</strong>, содержащий видео с меньшем разрешением (1280*720 30fps).</p><p>При работе с роликами в высоком разрешении в видеоредакторе Vegas может потребоваться создание прокси-файлов, то есть копий оригинального ролика с меньшем разрешением, чтобы не тормозил предпросмотр во время монтажа в самой программе. Vegas умеет создавать прокси, но это долго и муторно. Куда лучше использовать в качестве прокси уже имеющиеся файлы .LRF.</p><p><strong>Пошаговая инструкция, как преобразовать .LRF в Proxy для Vegas:</strong><br /></p><ol class="decimal"><li><p>Скачать утилиту <strong>ffmpeg</strong> для конвертации форматов - <a href="https://ffmpeg.org/download.html">https://ffmpeg.org/download.html</a></p></li><li><p>Прописать путь к файлу <strong>ffmpeg.exe</strong> в переменные среды <strong>PATH</strong>: <em>Откройте Параметры Windows (Win + I); Система → О программе → Дополнительные параметры системы; во вкладке &quot;Дополнительно&quot; нажмите &quot;Переменные среды...&quot;; в переменную Path добавить путь к папке с ffmpeg.</em></p></li><li><p>При копировании видео с камеры, скопировать в том числе и файлы с расширением <strong>.LRF</strong></p></li><li><p>В папку, куда скопированы видео-файлы с камеры, скопировать файл <strong>Proxy.cmd</strong> (см. вложение, не забудьте достать его из zip-архива).</p></li><li><p>Запустить <strong>Proxy.cmd</strong>, дождаться завершения процесса (должны исчезнуть все черные окна). По итогу у вас появятся файлы с расширением <strong>.MP4.sfvp0</strong>, это и есть прокси для Vegas.</p></li><li><p>Дальше просто работаете в Vegas, она автоматически подтянет данные прокси. Чтобы в окне предпросмотра использовались прокси-файлы (а не оригинальные), выставите режим предпросмотра <strong>Preview (Full)</strong> или <strong>Half</strong>, если у вас все равно тормозит воспроизведение.</p></li></ol><p>Шаги 1 и 2 проделываются один раз, в последующем они не требуются.</p><p><strong>Важные замечания:</strong><br /></p><ol class="decimal"><li><p>Во время создания прокси-файлов появится куча черных окошек (на каждый файл по одному окошку) и комп прилично нагрузится (как ЦП, так и видеокарта). Скорость процесса зависит от мощности вашего железа и количества файлов. Например, у меня порядка 100 файлов обрабатывались около 1 минуты 20 секунд.</p></li><li><p>Видеокарта <strong>NVidia</strong>! Для других карт надо поменять параметр <strong>GPU_ACCEL</strong> на <strong>amf</strong> для AMD и <strong>qsv</strong> для Intel. Но в этих режимах не тестировалось. Можно этому параметру присвоить пустое значение (тогда весь процесс пойдет через ЦП).</p></li><li><p>Этот скрипт также делает прокси и для видео с дрона <strong>Fimi X8 Mini</strong> (<em>приятный бонус</em>).</p></li><li><p>Тестировалось в <strong>VEGAS Pro 21.0</strong>.</p></li><li><p>В некоторых случаях возможна небольшая рассинхронизация прокси с оригиналом, особенно это касается таких FPS, как 48, 50, 100.</p></li><li><p>Прокси с гиперлапс-видео Vegas не принимает.</p></li><li><p>С таймлапс-видео прокси вообще отсутствует (можно сделать средствами самого Vegas).</p></li></ol><div class="codebox"><pre><code>:: ==============================================
:: Батник создания Proxy-файлов для VEGAS Pro 21.0 (и других версий)
:: Проверено по данным с камеры DJI Osmo Action 5 Pro и дрона Fimi X8 Mini
:: Для работы нужно установить ютилиту FFmpeg - https://ffmpeg.org/download.html
:: (c) Arigato Software, 2025
:: ==============================================

@echo off
setlocal enabledelayedexpansion

:: ==============================================
:: Конфигурация
:: ==============================================
:: Расширение прокси-файлов
set PROXY_EXT=MP4.sfvp0
:: Битрейт прокси
set BITRATE=12M
:: Ширина прокси
set WIDTH=1280
:: Высота прокси
set HEIGHT=720
:: GPU-ускорение (NVIDIA=cuda, AMD=amf, INTEL=qsv, CPU=пусто)
set GPU_ACCEL=cuda
:: Включение аудио в прокси (1=вкл, 0=выкл, для Vegas выкл!)
set INCLUDE_AUDIO=0

:: ==============================================
:: Обработка файлов *.LRV и *.LRF
:: ==============================================
echo [INFO] Create proxy files

:: Применяем параметры
if not &quot;!GPU_ACCEL!&quot;==&quot;&quot; set &quot;GPU_ACCEL=-hwaccel !GPU_ACCEL!&quot;
if !INCLUDE_AUDIO! equ 1 (
	set &quot;INCLUDE_AUDIO=-c:a aac -b:a 128k&quot;
) else (
	set &quot;INCLUDE_AUDIO=-an&quot;
)

:: Перебор всех .LRV и .LRF-файлов
for %%i in (*.LRV *.LRF) do (
	set &quot;source_filename=%%~ni.MP4&quot;
	set &quot;proxy_filename=%%~ni.%PROXY_EXT%&quot;
	echo !source_filename!
	
	:: Определяем FPS оригинала
	call :get_fps &quot;!source_filename!&quot; source_fps
	echo FPS: !source_fps!
	
	:: Получаем количество кадров
	call :frames &quot;!source_filename!&quot; frames
	echo Frames: !frames!
	
	:: Определяем поворот
	call :rotation &quot;%%i&quot; rotation_degrees
	if !rotation_degrees! neq 0 (
		echo Rotation: !rotation_degrees!
	)
	
	:: Выбираем фильтр поворота
	set &quot;vf_rotate=&quot;
	if !rotation_degrees! equ 90 set &quot;vf_rotate=transpose=1,&quot;
	if !rotation_degrees! equ 180 set &quot;vf_rotate=transpose=1,transpose=1,&quot;
	if !rotation_degrees! equ 270 set &quot;vf_rotate=transpose=2,&quot;
	
	:: Запускаем кодирование
	start &quot;!source_filename!&quot; ffmpeg !GPU_ACCEL! -i &quot;%%i&quot; -y -c:v mpeg2video ^
		-b:v %BITRATE% ^
		!INCLUDE_AUDIO! ^
		-vf &quot;!vf_rotate!scale=%WIDTH%:%HEIGHT%:force_original_aspect_ratio=decrease,setsar=1,fps=!source_fps!&quot; ^
		-f mp4 -r !source_fps! ^
		-movflags faststart -timecode &quot;00:00:00:00&quot; ^
		-fps_mode cfr -frames:v !frames! ^
		&quot;!proxy_filename!&quot;
)

:: ==============================================
:: Завершение работы
:: ==============================================
echo [SUCCESS] OK
rem pause
exit /b 0

:: ==============================================
:: Функция определения количества кадров
:: %1 - файл, %2 - выходная переменная
:: ==============================================
:frames
setlocal
set &quot;frames=0&quot;
for /f %%f in (
	&#039;ffprobe -v error -select_streams v:0 -show_entries stream^=nb_frames -of default^=nokey^=1:noprint_wrappers^=1 &quot;%~1&quot; 2^&gt;^&amp;1&#039;
) do set &quot;frames=%%f&quot;
endlocal &amp; set &quot;%~2=%frames%&quot;
exit /b 0

:: ==============================================
:: Функция определения поворота видео
:: %1 - файл, %2 - выходная переменная
:: ==============================================
:rotation
setlocal
set &quot;rot=0&quot;
for /f &quot;tokens=2 delims==&quot; %%r in (
	&#039;ffprobe -v error -select_streams v:0 -show_entries stream_side_data^=rotation -of default^=nw^=1 &quot;%~1&quot;&#039;
) do set &quot;rot=%%r&quot;

:: Нормализация отрицательных значений
if &quot;!rot!&quot;==&quot;-90&quot; set &quot;rot=270&quot;
if &quot;!rot!&quot;==&quot;-180&quot; set &quot;rot=180&quot;
if &quot;!rot!&quot;==&quot;-270&quot; set &quot;rot=90&quot;
endlocal &amp; set &quot;%~2=%rot%&quot;
exit /b 0

:: ==============================================
:: Функция определения частоты кадров видео
:: %1 - файл, %2 - выходная переменная
:: Возвращает fps в формате &quot;60000/1001&quot; (59.94) или &quot;30/1&quot; (30.0)
:: ==============================================
:get_fps
setlocal
set &quot;fps_value=0/0&quot;
for /f &quot;tokens=2 delims==&quot; %%f in (
    &#039;ffprobe -v error -select_streams v:0 -show_entries stream^=r_frame_rate -of default^=nw^=1 &quot;%~1&quot;&#039;
) do (
    set &quot;fps_value=%%f&quot;
    :: Удаляем возможные кавычки
    set &quot;fps_value=!fps_value:&quot;=!&quot;
)
endlocal &amp; set &quot;%~2=%fps_value%&quot;
exit /b 0</code></pre></div><p>P.S. Можно модифицировать скрипт для других видеоредакторов.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Fri, 19 Dec 2025 21:58:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18536&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: звуки (3 разных + бонус: сигнал SOS)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18487&amp;action=new</link>
			<description><![CDATA[<p>Два примера, как вывести звук из батника:</p><div class="codebox"><pre><code>@ echo off
setlocal enabledelayedexpansion

pause
echo Звуковой сигнал №1
call :beep1

pause
echo Звуковой сигнал №2
call :beep2

exit /b

:: Звуковой сигнал через символ с кодом 7 (Alt + 07)
:beep1
setlocal
0&lt;nul set /p =[BEL]
endlocal &amp; exit /b

:: Звуковой сигнал через choice
:beep2
echo 0y | choice /c y /n&gt;nul
exit /b</code></pre></div><p><strong>[BEL]</strong> - это непечатный символ с кодом 7. В форум его вставить нельзя, так что работающий пример качайте из вложения.</p><p>Подпрограмма <strong>beep1</strong> выводит звук через символ с кодом 7.<br />Подпрограмма <strong>beep2</strong> выводит звук через команду choice.</p><p>Не факт что везде будет работать, не проверял, но у меня оба метода работают и звуки разные.</p><p><strong>Сигнал SOS</strong></p><p>А вот и пример реализации сигнала SOS через звуки и мигание экраном:</p><div class="codebox"><pre><code>@ echo off
setlocal enabledelayedexpansion

cls
title Сигнал SOS

:sos
call :M_S
call :M_O
call :M_S
call :pause 2
echo.
goto sos

exit /b

:: O: ---
:M_O
call :dash
call :dash
call :dash
exit /b

:: S: ...
:M_S
call :dot
call :dot
call :dot
exit /b

:: Точка (Морзе)
:dot
setlocal
0&lt;nul set /p =.
color f0
call :beep2
color 07
endlocal &amp; exit /b

:: Тире (Морзе)
:dash
setlocal
0&lt;nul set /p =-
color f0
call :beep2
call :pause
color 07
endlocal &amp; exit /b

:: Звуковой сигнал через choice
:beep2
echo 01 | choice /c 1 /n&gt;nul
exit /b

:: Задержка в сек (0 - короткая задержка)
:pause
setlocal
set t=%1
if &quot;%t%&quot;==&quot;&quot; set t=0
timeout /t %t% &gt;nul
endlocal &amp; exit /b
</code></pre></div><p>Так как звук подается вызовом подпрограммы beep2, которая работает через choice, то и непечатных символов тут нет. Можно копировать код прямо с форума.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Tue, 02 Sep 2025 21:04:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18487&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Многозадачность]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18486&amp;action=new</link>
			<description><![CDATA[<p>Для реализации некоторого параллельного программирования в CMD можно использовать такую команду:</p><div class="codebox"><pre><code>start /b имя.cmd</code></pre></div><p>Параметр <strong>/b</strong> позволяет запустить скрипт имя.cmd в том же консольном окне, при этом основная программа продолжает выполнение, а имя.cmd работает совместно, разделяя с ней потоки ввода-вывода.</p><p>Вот такой пример. Батник <strong>main.cmd</strong>:<br /></p><div class="codebox"><pre><code>@echo off
setlocal enabledelayedexpansion

cls
set test_var=Hello, second
start /b second.cmd

FOR /L %%i IN (0,1,10) DO (
	echo Thread_1: %%i
	timeout /t 1 &gt;nul
)

set test_var=Goodby, second
echo Thread_1 ending</code></pre></div><p>Батник <strong>second.cmd</strong>:<br /></p><div class="codebox"><pre><code>@echo off

echo %test_var%

FOR /L %%i IN (0,1,10) DO (
	echo Thread_2: %%i
	timeout /t 2 &gt;nul
)

echo Thread_2 ending
echo %test_var%</code></pre></div><p>Виден параллельный вывод в одну и туже консоль. При этом имеется возможность &quot;передать&quot; все данные из основной программы в параллельный поток. В примере это переменная test_var. Однако в second.cmd создается лишь ее копия, то есть не получится менять значение переменной одного потока из другого.</p><p>Если все же надо наладить взаимодействие двух потоков, то придется использовать общий файл.</p><p><strong>Где можно использовать на практике?</strong></p><p>Например, команда <strong>choice</strong> не просто считывает нажатую клавишу, но и останавливает выполнение до того, пока пользователь не нажмет клавишу. Если нам надо отслеживать нажатые клавиши, при этом не тормозить основной поток, то обработку клавиатуры можно вынести в отдельный поток. Например:<br /></p><div class="codebox"><pre><code>@echo off
:loop
choice /c YN /n /cs
echo %errorlevel% &gt; input.txt
goto loop
</code></pre></div><p>Нажатая клавиша окажется в файле input.txt (точнее ее порядковый номер в списке). От туда основной поток в нужный момент может произвести чтение, не останавливая своей работы на ожидание нажатия клавиши.</p><p>Это лишь один пример, можно придумать и другие способы применения подобной многопоточности.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Tue, 02 Sep 2025 17:19:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18486&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Управляющие последовательности ANSI/ECMA-48]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18484&amp;action=new</link>
			<description><![CDATA[<p>Дополним тему <a href="https://forum.script-coding.com/viewtopic.php?id=7944">CMD/BAT: Вывод разноцветного текста</a>, точнее предложим совершенно новое и куда более продвинутое решение.</p><p>О чем идет речь, подробнее читайте тут - <a href="https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_ANSI">Управляющие последовательности ANSI</a></p><p>Данная методика работает начиная с Windows 10.</p><p><span class="postimg"><img src="https://i.ibb.co/MkKwQgnL/2.png" alt="https://i.ibb.co/MkKwQgnL/2.png" /></span></p><p>Для управления выводом текста в консоль используются специальные ESC-коды. Выглядят они так:</p><div class="codebox"><pre><code>ESC[&lt;параметры&gt;&lt;буква-команда&gt;</code></pre></div><p>ESC[ — признак начала управляющей последовательности. Непечатный символ с кодом 27 (U+001B). Набирается посредством Alt+27 или Alt+027, на экране выглядит как вопросик в квадрате или иначе, в зависимости от редактора.<br />&lt;параметры&gt; — цифры (иногда с ; ), указывают режим или количество.<br />&lt;буква-команда&gt; — финализирующий символ, указывающий какое именно действие.</p><p>Так как символ ESC непечатный, то не всегда удастся вставить код в сообщение, примеры надо качать из вложений.</p><p>Команда m задает цвет текста и фона (цвет задается или из палитры 16, или из палитры 256, или по RGB), различные начертания шрифта (подчеркнутый, жирный).</p><p><strong>Цвета из палитры 16</strong></p><p><a href="https://ibb.co/fdwDRVqf"><span class="postimg"><img src="https://i.ibb.co/yFj4Tmdt/1.png" alt="https://i.ibb.co/yFj4Tmdt/1.png" /></span></a></p><p><strong>Цвета из палитры 256</strong></p><p>ESC[38;5;&lt;n&gt;m&nbsp; &nbsp;→ цвет текста<br />ESC[48;5;&lt;n&gt;m&nbsp; &nbsp;→ цвет фона</p><p>где &lt;n&gt; от 0 до 255.<br />0–7: базовые цвета<br />8–15: яркие<br />16–231: 6×6×6 RGB-куб<br />232–255: градации серого</p><p><strong>Полноцветный (TrueColor, 24-бит)</strong></p><p>ESC[38;2;R;G;Bm&nbsp; &nbsp;→ текст (R,G,B = 0–255)<br />ESC[48;2;R;G;Bm&nbsp; &nbsp;→ фон</p><p>Пример:<br /></p><div class="codebox"><pre><code>echo [38;2;255;128;0mОранжевый текст[0m</code></pre></div><p><strong>Основные атрибуты</strong></p><p>ESC[0m&nbsp; &nbsp;→ сброс атрибутов<br />ESC[1m&nbsp; &nbsp;→ жирный / яркий цвет<br />ESC[2m&nbsp; &nbsp;→ тусклый<br />ESC[3m&nbsp; &nbsp;→ курсив (обычно игнорируется)<br />ESC[4m&nbsp; &nbsp;→ подчёркивание<br />ESC[5m&nbsp; &nbsp;→ мигающий (обычно игнорируется)<br />ESC[7m&nbsp; &nbsp;→ инверсия<br />ESC[8m&nbsp; &nbsp;→ скрытый<br />ESC[9m&nbsp; &nbsp;→ зачёркнутый<br />ESC[22m&nbsp; → отмена жирного/тусклого<br />ESC[24m&nbsp; → отмена подчёркивания<br />ESC[27m&nbsp; → отмена инверсии<br />ESC[30–37m&nbsp; → цвет текста<br />ESC[40–47m&nbsp; → цвет фона<br />ESC[90–97m&nbsp; → яркие цвета текста<br />ESC[100–107m → яркие цвета фона<br />ESC[38;5;#m&nbsp; → текст 256-цвет<br />ESC[48;5;#m&nbsp; → фон 256-цвет<br />ESC[38;2;R;G;Bm → текст TrueColor (24-бит)<br />ESC[48;2;R;G;Bm → фон TrueColor (24-бит)</p><p>Работает далеко не все...</p><p><strong>Комбинирование</strong></p><p>Можно комбинировать через ;. Например:</p><div class="codebox"><pre><code>[4;31mподчёркнутый красный[0m
[7;33mжёлтый инверсный[0m
</code></pre></div><p><strong>Сброс всех атрибутов</strong></p><p>ESC[0m&nbsp; &nbsp;→ сброс атрибутов</p><p><strong>Очистка экрана</strong></p><p>ESC[J&nbsp; &nbsp; → очистка экрана (по умолчанию от курсора до конца)<br />ESC[0J&nbsp; &nbsp;→ от курсора до конца экрана<br />ESC[1J&nbsp; &nbsp;→ от начала экрана до курсора<br />ESC[2J&nbsp; &nbsp;→ весь экран<br />ESC[3J&nbsp; &nbsp;→ весь экран + буфер (если поддерживается)</p><p>ESC[K&nbsp; &nbsp; → очистка строки (по умолчанию от курсора до конца)<br />ESC[0K&nbsp; &nbsp;→ от курсора до конца строки<br />ESC[1K&nbsp; &nbsp;→ от начала строки до курсора<br />ESC[2K&nbsp; &nbsp;→ вся строка</p><p><strong>Управление курсором</strong></p><p>ESC[#A&nbsp; &nbsp;→ вверх # строк<br />ESC[#B&nbsp; &nbsp;→ вниз # строк<br />ESC[#C&nbsp; &nbsp;→ вправо # колонок<br />ESC[#D&nbsp; &nbsp;→ влево # колонок<br />ESC[#E&nbsp; &nbsp;→ на начало строки, ниже на #<br />ESC[#F&nbsp; &nbsp;→ на начало строки, выше на #<br />ESC[#G&nbsp; &nbsp;→ в колонку #<br />ESC[H → курсор в левый верхний угол<br />ESC[#;#H → в строку;колонку (позиция курсора)<br />ESC[#;#f → то же самое (альтернативная форма)</p><p>ESC[s&nbsp; &nbsp; → сохранить позицию курсора<br />ESC[u&nbsp; &nbsp; → восстановить позицию курсора</p><p>ESC[?25l → скрыть курсор<br />ESC[?25h → показать курсор</p><p>ESC[6n&nbsp; &nbsp;→ выводит текущее положение курсора в формате ^[[n;mR, где n — строка, m — столбец. Ответ попадает в поток ввода. Пока непонятно, как его считать...</p><p><strong>Прокрутка</strong></p><p>ESC[#S&nbsp; &nbsp; → прокрутить экран вверх на #<br />ESC[#T&nbsp; &nbsp; → прокрутить экран вниз на #</p><p>Пример:</p><div class="codebox"><pre><code>@echo off
echo Очистка экрана: [2J
echo Красный текст: [31mHello[0m
echo Подчёркнутый: [4mText[0m
echo Инверсия: [7mInverted[0m
</code></pre></div><p>Более полная демка во вложении. Скрины демки:</p><p><a href="https://ibb.co/Vc2sYD8X"><span class="postimg"><img src="https://i.ibb.co/Vc2sYD8X/1.png" alt="https://i.ibb.co/Vc2sYD8X/1.png" /></span></a> <a href="https://ibb.co/TxG1N1fK"><span class="postimg"><img src="https://i.ibb.co/TxG1N1fK/3.png" alt="https://i.ibb.co/TxG1N1fK/3.png" /></span></a></p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Mon, 01 Sep 2025 19:05:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18484&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Корректно работает только при повторном запуске, баг?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18455&amp;action=new</link>
			<description><![CDATA[<p>Почему такой код срабатывает только со второго раза?</p><p>Файл wat.cmd<br /></p><div class="codebox"><pre><code>@echo off
if not &quot;%1&quot;==&quot;&quot; (
	set attr=%~a1
	echo %attr%
)
</code></pre></div><p>:<br /></p><div class="quotebox"><blockquote><p>C:\#_\TEST&gt;wat.cmd wat.cmd<br />Режим вывода команд на экран (ECHO) отключен.</p><p>C:\#_\TEST&gt;wat.cmd wat.cmd<br />--a--------</p></blockquote></div><p>Но вот так работает с первого:<br /></p><div class="codebox"><pre><code>@echo off
if not &quot;%1&quot;==&quot;&quot; (
	echo %~a1
)
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Mon, 02 Jun 2025 10:59:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18455&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Получить температуру процессора]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18451&amp;action=new</link>
			<description><![CDATA[<p>Батник выводит температуру процессора в градусах Цельсия с точностью до двух знаков после десятичной точки:</p><div class="codebox"><pre><code>@echo off
for /f &quot;skip=1 tokens=2 delims==&quot; %%A in (&#039;wmic /namespace:\\root\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature /value&#039;) do (
   set Kel=%%~A
)
set /a Deg=Kel*10-27315
set CPU_Temp=%Deg:~0,-2%.%Deg:~-2%
echo CPU temperature: %CPU_Temp% C</code></pre></div><p>Батник надо запускать от администратора.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Thu, 22 May 2025 07:02:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18451&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Открыть файл 7z архив и удалить первые символы]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18408&amp;action=new</link>
			<description><![CDATA[<p>Добрый день, </p><p>Надо в командной строке coздать архив и в файле (архиве) потом изменить (удалить, добавить) первые символы.<br />Создаю Архив:<br /></p><div class="codebox"><pre><code>&quot;C:\Program Files\7-Zip\7z.exe&quot; a password.7z password.txt -pP@$$w0rd</code></pre></div><p>Пробовол удалить так первые 2 символа<br /></p><div class="codebox"><pre><code>
...
&lt;&quot;password.7z&quot; set /p sLine=&gt;nul
echo %sLine:~2%&gt;&quot;password.7z.not_7z_file&quot; 
more +1 &quot;password.7z&quot;&gt;&gt;&quot;password.7z.not_7z_file&quot;
...
</code></pre></div><p>Но файл полностью меняется и не работает потом, если удаляю (добавляю) вручную в Notepad++, то все работает.</p><p>Как это автоматизировать?</p><p>Заранее благодарю.</p><br /><div class="codebox"><pre><code>7z¼¯&#039; Ø4Ã       r       Õ&lt;ÜWüË„¤¯:@õNÖ.’3 	  $ñSã1?öáÝÒ«™¾r·HðÎ!!   
²T&amp;Y    p a s s w o r d . t x t    
 Ø‹TjÅÛ       </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Димон)]]></author>
			<pubDate>Wed, 26 Mar 2025 08:00:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18408&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: запуск в скрытом режиме (SW_HIDE)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18335&amp;action=new</link>
			<description><![CDATA[<p>Start in SW_HIDE mode.<br />Есть какие-нибудь решения для данной задачи, господа форумчане-скриптописатели?</p><p>p.s. без использования сторонних средств.</p>]]></description>
			<author><![CDATA[null@example.com (АДМИНИСТРАТОР)]]></author>
			<pubDate>Mon, 02 Dec 2024 15:53:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18335&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Исключить расширение из имени файла]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18312&amp;action=new</link>
			<description><![CDATA[<div class="codebox"><pre><code>for f in &quot;$@&quot;; do
	/opt/homebrew/bin/ffmpeg -i &quot;$f&quot; -c:v libx265 -vtag hvc1 &quot;$f&quot;.mp4
	/bin/rm &quot;$f&quot;
done;</code></pre></div><p>Здравствуйте! Сценарий конвертирует видео и удаляет исходный файл. На выходе получаю файл с двойным расширением (<em>~mp4.mp4</em>). Как исключить расширение из названия исходного файла? На выходе файл должен иметь расширение .mp4, но на входе может быть .mov, .ts, .braw и т.д. Спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (becauseim)]]></author>
			<pubDate>Fri, 11 Oct 2024 13:36:36 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18312&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Резервное копирование с версионностью.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18212&amp;action=new</link>
			<description><![CDATA[<p>Доброго времени суток всем обитателям столь полезного ресурса, столкнулся с не простым вопросом (для меня, по крайней мере)</p><p>Суть такова:<br />Есть каталог на диске 1, есть каталог зеркала на диске 2, создаваемого с помощью BAT по средствам robocopy.<br />Хочу чтобы был дополнительный BAT который смотрит на каталог диска 1 сравнивая его с зеркалом каталога второго диска но поученный результат копировал в третий каталог своего рода версионность.<br />Суть идеи такова: с понедельника по пятницу работает пять BAT файлов для каждого дня недели, копирующих только те файлы которые были добавлены или изменены, в субботу же запускается основной BAT который очищает каталоги версий и делает новое зеркало.</p><p>Прежде чем создать топик я воспользовался поиском с запросом «robocopy» и «резервное копирование» просмотрев найденное нашел бизкое по теме, но не то что нужно.</p><p>На текущий момент мысли крутятся вокруг следующего кода:</p><div class="codebox"><pre><code>
@echo on
chcp 1251
setlocal enabledelayedexpansion

rem Параметры
set &quot;sourceDir=A:\$SUR&quot;
set &quot;targetDir=A:\$TARGT&quot;
set &quot;backupDir=A:\$CEL&quot;
set &quot;logFile=A:\$log\robocopy.log&quot;

rem Очистка лог-файла перед началом
echo. &gt; &quot;%logFile%&quot;

rem Запуск robocopy для сравнения каталогов и записи изменений в лог-файл
robocopy &quot;%sourceDir%&quot; &quot;%targetDir%&quot; /E /L /FP /NJH /NJS /NDL /NS /NC /XO /XX /LOG:&quot;%logFile%&quot;

rem Показать содержимое лог-файла для проверки
echo Содержимое лог-файла:
type &quot;%logFile%&quot;

rem Чтение лога и копирование измененных файлов
for /f &quot;tokens=*&quot; %%i in (&#039;type &quot;%logFile%&quot;&#039;) do (
    set &quot;line=%%i&quot;
    rem Удаление начальных пробелов
    set &quot;filePath=!line:~14!&quot;

    rem Проверка, что строка не пустая
    if not &quot;!filePath!&quot; == &quot;&quot; (
        echo Обработка файла: !filePath!

        rem Получение полного пути файла относительно исходного каталога
        set &quot;relativeFilePath=!filePath:%sourceDir%\=!&quot;

        rem Полный путь к файлу в целевом каталоге
        set &quot;backupFile=%backupDir%\!relativeFilePath!&quot;
        
        rem Директория файла в целевом каталоге
        set &quot;backupFileDir=!backupFile!&quot;
        for %%k in (&quot;!backupFileDir!&quot;) do set &quot;backupFileDir=%%~dpk&quot;
        
        if not exist &quot;!backupFileDir!&quot; (
            echo Создание каталога: &quot;!backupFileDir!&quot;
            mkdir &quot;!backupFileDir!&quot;
        )

        echo Копирование файла: &quot;%sourceDir%\!relativeFilePath!&quot; в &quot;!backupFileDir!&quot;
        robocopy &quot;%sourceDir%&quot; &quot;!backupFileDir!&quot; &quot;!relativeFilePath!&quot; /COPYALL /R:0 /W:0

        echo Команда robocopy завершена с кодом ошибки: %ERRORLEVEL%
    )
)

echo Копирование измененных файлов завершено.
endlocal
pause
</code></pre></div><p>Но к сожалению не могу понять почему он не работает.<br />Лог файл создается измененные файлы туда заносятся но копирования не происходит, возможно у кого-то есть более здравая мысль как это реализовать корректнее и надежнее…<br />Также необходимо учитывать что robocopy взят по причине присутствия длинных имен и каталогов.</p>]]></description>
			<author><![CDATA[null@example.com (grisha.puding)]]></author>
			<pubDate>Sat, 01 Jun 2024 21:29:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18212&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Любые действия с курсором]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18162&amp;action=new</link>
			<description><![CDATA[<p>Здравствуйте! При запуске Windows сразу открывается программа, которая скрывает курсор, при взаимодействии с курсором любым после запуска программы - курсор появляется ( взаимодействия - к примеру показ скрытие курсора на CTRL такая функция или смена дизайна курсора в настройках ), так вот надо сделать я так думаю что-то типа .bat файла чтобы после запуска программы или через несколько секунд какие либо манипуляции с курсором были для его появления.</p>]]></description>
			<author><![CDATA[null@example.com (gulyaev-d.2015)]]></author>
			<pubDate>Mon, 08 Apr 2024 14:21:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18162&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: выполнить команду при закрытии окна сценария]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18061&amp;action=new</link>
			<description><![CDATA[<p>Здравствуйте.<br />В организации с помощью сторонней утилиты объединяются PDF файлы в один внутри одной папки.<br />Из-за структуры названий пути получаются довольно большими, из-за чего в сценарий заложено создание диска по команде &quot;subst&quot; и работы уже в нём.<br />Коротко:<br /></p><div class="codebox"><pre><code>subst i: &quot;d:\&quot;</code></pre></div><p>С последующим размонтированием, если всё прошло успешно.<br /></p><div class="codebox"><pre><code>subst i: /d</code></pre></div><p>Как при возникновении ошибки и закрытии окна по клавише &quot;Esc&quot; или по крестику сделать так, чтобы созданный диск &quot;subst&quot; размонтировался?<br />Возможно ли прописать действия на условие закрытия окна внутри BAT файла?</p><p>Думал на внешнее решение - Планировщик Windows, но тогда ему надо как то передать букву диска.&nbsp; Буква диска у меня в скрипте назначается автоматически из свободных, если существующий занят, поэтому на разных ПК буква может быть разная.</p>]]></description>
			<author><![CDATA[null@example.com (berstrider)]]></author>
			<pubDate>Fri, 12 Jan 2024 11:21:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18061&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: не работают комманды и отказанно в доступе]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=18037&amp;action=new</link>
			<description><![CDATA[<p>Доброго дня.<br /></p><div class="codebox"><pre><code>
DEL /F /S /Q /A &quot;C:\sudo\Videos\*.pdf&quot;
</code></pre></div><p>после отработки в bat пишет:<br /></p><div class="codebox"><pre><code>
файл удален c:\sudo\video\readme1.pdf
файл удален c:\sudo\video\readme2.pdf
файл удален c:\sudo\video\readme3.pdf
</code></pre></div><p>но фактически файлы на месте, не удалились.<br />Eсли пишу с записью в файл txt в ту же директорию.<br />Пример<br />myBat.bat&gt; out.txt</p><p>пишет отказано в доступе.</p><p>Что делать?<br />Под виндой могу создавать файлы в терминале отказано в доступе и не работают комманды хотя bat отрабатывает но ни чего не происходит.<br />Пишет отказано в доступе.</p>]]></description>
			<author><![CDATA[null@example.com (mike215misha)]]></author>
			<pubDate>Mon, 18 Dec 2023 09:25:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=18037&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Батник на 3 простых действия]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=17920&amp;action=new</link>
			<description><![CDATA[<p>Здравствуйте. Есть вопрос, который не могу решить вот уже 3 дня, как ни пытался самостоятельно.</p><br /><p><strong>Исходные данные</strong><br />Есть каталог с файлами .txt. В каждом файле количество строк разное. Содержание каждого файла:</p><p>234324;Ссылка1<br />464565;Ссылка2<br />546456;Ссылка3<br />456456;Ссылка4<br />...<br />7899;СсылкаN</p><br /><p><strong>Что должен делать батник?</strong><br />1. В каждом файле оставить только 3 первых строки, остальные удалить.<br />2. В каждом файле оставить только ссылки. Цифры, которые расположены перед ссылками и символ &quot;;&quot; удалить<br />3. Выбирать рандомно при каждом запуске 3 файла, склеивать данные и создавать новый файл с этими данными.</p><br /><p><strong>Что должно получиться в итоге?</strong></p><p>При запуске батника должен получиться новый файл в таком виде:<br />Ссылка1<br />Ссылка2<br />Ссылка3</p><p>Ссылка4<br />Ссылка5<br />Ссылка6</p><p>Ссылка7<br />Ссылка8<br />Ссылка9</p><br /><br /><br /><p>Всем заранее благодарен за помощь ибо своих сил и знаний не хватает для реализации.</p>]]></description>
			<author><![CDATA[null@example.com (denisss)]]></author>
			<pubDate>Tue, 22 Aug 2023 08:09:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=17920&amp;action=new</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Создание имен файлов по маске.]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?id=17752&amp;action=new</link>
			<description><![CDATA[<p>Есть bat, который берет все называния файлов из папки и названия закидывает в files.txt</p><div class="codebox"><pre><code>
chcp 1251
cd /d E:\\Videos
dir /b /d &gt;&gt;files.txt
</code></pre></div><p>Получается в итоге в файле files.txt так:</p><div class="codebox"><pre><code>
107.mp4
108.mp4
</code></pre></div><p>Нужно чтобы названия с маской создавались вот так!</p><div class="codebox"><pre><code>
file &#039;107.mp4&#039;
file &#039;108.mp4&#039;
</code></pre></div><p>Как такой батник соорудить?)))</p>]]></description>
			<author><![CDATA[null@example.com (vivexce)]]></author>
			<pubDate>Fri, 21 Apr 2023 16:49:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?id=17752&amp;action=new</guid>
		</item>
	</channel>
</rss>
