<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; CMD/BAT: (+JS) Скачиваем скрипты с GitHub Pages и патчим при этом]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=18619&amp;type=atom" />
	<updated>2026-08-29T06:00:58Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=18619</id>
		<entry>
			<title type="html"><![CDATA[CMD/BAT: (+JS) Скачиваем скрипты с GitHub Pages и патчим при этом]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=163504#p163504" />
			<content type="html"><![CDATA[<p>Я публиковал здесь уже гибридный CMD/JS скрипт для скачивания видео при помощи yt-dlp, теперь дополнил внешним .js скриптом по поиску уже просмотренного видео в базе данных истории файлов Windows 10. Понятно, что такой сценарий работы не каждому нужен и доступен, поэтому написал скрипт &quot;Обновить скрипты для скачивания видео.cmd&quot;, в котором по умолчанию отключил скачивание Search.js и пропатчил y.cmd, отключив соответствующие проверки (хотя и без этого всё работает корректно) и сменив заодно кодировку в нём (все мои скрипты в последнее время написаны и опубликованы в кодировке utf-8), вот текущая версия:<br /></p><div class="codebox"><pre><code>@set @x=0 /*
@echo off
chcp 65001 &gt;nul
.\yt-dlp.exe -U
call :update_script y.cmd /coding:Windows-1251 /rep:&quot;^(set test_prev_downloaded=)1$`$10;(^set extension=)\S+$`$1mp4&quot;
::call :update_script Search.js
exit /b
:update_script
del /f %1.bak 2&gt;nul
rename .\%1 %1.bak 2&gt;nul
curl.exe  --output .\%1 https://kvk-2015.github.io/%1
cscript /nologo /e:javascript &quot;%~dpnx0&quot; %*
goto:eof */

// Для скачанного скрипта можно выполнить патчинг согласно вашим предпочтениям

var fso = new ActiveXObject(&quot;Scripting.FileSystemObject&quot;), WshShell = new ActiveXObject(&quot;WScript.Shell&quot;), newText, CodePagesTestsDone = false, CodePages = [];
var str, coding = WSH.Arguments.Named.Item(&quot;coding&quot;), processing = [], pair, lineIndex, line, lines, splitter = &quot;`&quot;;

with(str = new ActiveXObject(&quot;ADODB.Stream&quot;)){Type = 2; Mode = 3;}

if(WSH.Arguments.Unnamed.Count &amp;&amp; (fso.FileExists(scriptName=WSH.Arguments.Unnamed(0)))){
    if(rep=WSH.Arguments.Named.Item(&quot;rep&quot;)){
        lines = rep.split(&quot;;&quot;);
        for(lineIndex in lines){
            pair = lines[lineIndex].split(splitter);
            if(pair.length != 2)WSH.echo(DosToWin(&quot;\r\nОшибка в правиле: &quot; + lines[lineIndex] + &quot; - между шаблоном поиска и замены должен быть разделитель &#039;&quot; + splitter + &quot;&#039;...\r\n&quot;));
            processing.push([new RegExp(pair[0]), pair[1]]);
        }
    }
    with(new ActiveXObject(&quot;ADODB.Stream&quot;)){Type=2; Mode=3;
        if(coding || processing){Open(); Charset=&quot;utf-8&quot;; LoadFromFile(scriptName); Position=0; newText=ReadText().replace(/\r\n|\n|\r/g, &quot;\r\n&quot;); Close();
            lines = newText.split(&quot;\r\n&quot;); newText = &quot;&quot;;
            for(lineIndex in lines){
                line = lines[lineIndex];
                for(var i=0; i&lt;processing.length; i++)line = line.replace(processing[i][0], processing[i][1]);
                newText += &quot;\r\n&quot; + line;
            }
            if(fso.FileExists(scriptName))fso.DeleteFile(scriptName);
            Open(); Charset=coding || &quot;utf-8&quot;; Position=0; WriteText(newText.slice(2)); SaveToFile(scriptName); Close();
        }
    }
}

function getCodepage(oExec){
    while(!oExec.Status || !oExec.StdOut.AtEndOfStream){
        var new_codepage = /^[\s\S]*(?:REG_SZ|:)\s+(\S+)\s*$/.test(oExec.StdOut.ReadAll()) ? RegExp.$1 : &quot;&quot;;
    }
    return new_codepage;
}

function getCodepageName(oExec){
    var commandHead = &#039;reg.exe query &quot;HKCR\\MIME\\Database\\Codepage\\&#039;, codepage, WebCharset;
    oExec = WshShell.Exec(commandHead + (codepage = getCodepage(oExec)) + &#039;&quot; -v BodyCharset&#039;); var tempCodepageName = getCodepage(oExec);
    oExec = WshShell.Exec(commandHead + codepage + &#039;&quot; -v WebCharset&#039;); return (WebCharset = getCodepage(oExec)) ? WebCharset : tempCodepageName;
}
function DosToWin(dosString){
    var result;
    if(!CodePagesTestsDone){
        var oExec = WshShell.Exec(&#039;cmd.exe /c chcp&#039;);   var DOS_codepage = getCodepageName(oExec);
        oExec = WshShell.Exec(&#039;reg.exe query &quot;HKLM\\SYSTEM\\CurrentControlSet\\Control\\Nls\\CodePage&quot; -v ACP&#039;);    var Windows_codepage = getCodepageName(oExec);
        if(DOS_codepage != Windows_codepage)CodePages = [&quot;utf-8&quot; || DOS_codepage, Windows_codepage];
        CodePagesTestsDone = true;
    }
    if(!CodePages.length)return dosString;
    with(str){
        Open();
        Charset = CodePages[1];
        WriteText(dosString);
        Position = 0;
        Charset = CodePages[0];
        result = ReadText();
        Close();
    }
    return result;
}
</code></pre></div><p>В общем, ещё пример использования гибридных CMD/JS скриптов. И здесь тоже обработка текста...</p>]]></content>
			<author>
				<name><![CDATA[kvk-2019]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40485</uri>
			</author>
			<updated>2026-08-29T06:00:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=163504#p163504</id>
		</entry>
</feed>
