Как найти определенную c строку букв в переменной .BAT, которая содержит очень длинную строку? - PullRequest
1 голос
/ 27 марта 2020

Попытка выделить только часть строки, содержащейся в переменной .BAT.

Переменная String ! Original! содержит следующее:

v2.30|Action=Allow|Active=FALSE|Dir=In|Profile=Domain|Profile=Private|Name=@{Microsoft.Windows.Cortana_1.13.0.18362_neutral_neutral_cw5n1h2txyewy?ms-resource://Microsoft.Windows.Cortana/resources/PackageDisplayName}|Desc=@{Microsoft.Windows.Cortana_1.13.0.18362_neutral_neutral_cw5n1h2txyewy?ms-resource://Microsoft.Windows.Cortana/resources/ProductDescription}|LUOwn=S-1-5-21-1502285707-838241421-2811185785-1001|AppPkgId=S-1-15-2-1861897761-1695161497-2927542615-642690995-327840285-2659745135-2630312742|EmbedCtxt=@{Microsoft.Windows.Cortana_1.13.0.18362_neutral_neutral_cw5n1h2txyewy?ms-resource://Microsoft.Windows.Cortana/resources/PackageDisplayName}|Platform=2:6:2|Platform2=GTEQ|

Я пытаюсь разобрать его по последовательности символов сразу после слова " Name = ".

Следующее для L oop возвращает: Система не может найти файл v2.30 | Действие.

FOR /F "tokens=* delims=" %%h in (!Original! ^| Findstr "Name=") do (ECHO %%h)

Что я делаю не так? Почему он читает только первую небольшую часть содержимого ! Оригинал! ?

Оценил ...

1 Ответ

0 голосов
/ 27 марта 2020

Попробуйте (сохраните как .bat):

@if (@X)==(@Y) @end /* JScript comment
    @echo off

    set "string=v2.30|Action=Allow|Active=FALSE|Dir=In|Profile=Domain|Profile=Private|Name=@{Microsoft.Windows.Cortana_1.13.0.18362_neutral_neutral_cw5n1h2txyewy?ms-resource://Microsoft.Windows.Cortana/resources/PackageDisplayName}|Desc=@{Microsoft.Windows.Cortana_1.13.0.18362_neutral_neutral_cw5n1h2txyewy?ms-resource://Microsoft.Windows.Cortana/resources/ProductDescription}|LUOwn=S-1-5-21-1502285707-838241421-2811185785-1001|AppPkgId=S-1-15-2-1861897761-1695161497-2927542615-642690995-327840285-2659745135-2630312742|EmbedCtxt=@{Microsoft.Windows.Cortana_1.13.0.18362_neutral_neutral_cw5n1h2txyewy?ms-resource://Microsoft.Windows.Cortana/resources/PackageDisplayName}|Platform=2:6:2|Platform2=GTEQ|"
    set "splitBy=|"

    for /f "tokens=* delims=" %%a in ('cscript //E:JScript //nologo "%~f0"  "%string%" "%splitBy%"') do (
        set "%%~a" 2>nul
    )
    echo %Name%
    exit /b %errorlevel%

@if (@X)==(@Y) @end JScript comment */

var string=WScript.Arguments.Item(0);
var splitBy=WScript.Arguments.Item(1);

var i;
for (i = 0; i < string.split(splitBy).length; i++) {
  WScript.Echo(string.split(splitBy)[i]);
}

пакетное решение только для синтаксиса:

@echo off
setlocal EnableDelayedExpansion

@echo off
REM Creating a Newline variable (the two blank lines are required!)
set NLM=^


set NL=^^^%NLM%%NLM%^%NLM%%NLM%


set "string=v2.30|Action=Allow|Active=FALSE|Dir=In|Profile=Domain|Profile=Private|Name=@{Microsoft.Windows.Cortana_1.13.0.18362_neutral_neutral_cw5n1h2txyewy?ms-resource://Microsoft.Windows.Cortana/resources/PackageDisplayName}|Desc=@{Microsoft.Windows.Cortana_1.13.0.18362_neutral_neutral_cw5n1h2txyewy?ms-resource://Microsoft.Windows.Cortana/resources/ProductDescription}|LUOwn=S-1-5-21-1502285707-838241421-2811185785-1001|AppPkgId=S-1-15-2-1861897761-1695161497-2927542615-642690995-327840285-2659745135-2630312742|EmbedCtxt=@{Microsoft.Windows.Cortana_1.13.0.18362_neutral_neutral_cw5n1h2txyewy?ms-resource://Microsoft.Windows.Cortana/resources/PackageDisplayName}|Platform=2:6:2|Platform2=GTEQ|"

setlocal enableDelayedExpansion
echo !string:^|=%NL%! >#
for /f "tokens=* delims=" %%a in (#) do (
    set "%%~a" >nul 2>&1
)

echo %NAME%
del /q #
...