2017-03-09 1 views
0

Wie bekomme ich und echo nur die partition_index: SYS18, linear_start_addr: 0x8020000, physical_start_addr: 0x8020000 und partition_size: 0x100000?Wie bekomme ich frp Partition über cmd in Scatter-Datei

Darüber hinaus kann scatter.txt je nach Android-Gerätemodell variieren.

Ich brauche nur die FRP-Teil der scatter.txt.

partition_index: SYS17 
    partition_name: metadata 
    file_name: NONE 
    is_download: false 
    type: NORMAL_ROM 
    linear_start_addr: 0x6020000 
    physical_start_addr: 0x6020000 
    partition_size: 0x2000000 
    region: EMMC_USER 
    storage: HW_STORAGE_EMMC 
    boundary_check: true 
    is_reserved: false 
    operation_type: INVISIBLE 
    reserve: 0x00 

    partition_index: SYS18 
    partition_name: frp 
    file_name: NONE 
    is_download: false 
    type: NORMAL_ROM 
    linear_start_addr: 0x8020000 
    physical_start_addr: 0x8020000 
    partition_size: 0x100000 
    region: EMMC_USER 
    storage: HW_STORAGE_EMMC 
    boundary_check: true 
    is_reserved: false 
    operation_type: PROTECTED 
    reserve: 0x00 

    partition_index: SYS19 
    partition_name: pad 
    file_name: NONE 
    is_download: false 
    type: NORMAL_ROM 
    linear_start_addr: 0x8120000 
    physical_start_addr: 0x8120000 
    partition_size: 0x6E0000 
    region: EMMC_USER 
    storage: HW_STORAGE_EMMC 
    boundary_check: true 
    is_reserved: false 
    operation_type: INVISIBLE 
    reserve: 0x00 

Antwort

0
@echo off&SetLocal EnableDelayEdexpansion 
set /a n = 1 
for /f "delims=" %%a in (scatter.txt) do (
    set "b=%%a" 
    set "b=!b:partition_index=!" 
    set "b=!b:linear_start_addr=!" 
    set "b=!b:physical_start_addr=!" 
    set "b=!b:partition_size=!" 
    if not "!b!" equ "%%a" (
    if defined flag set /a n+=1 
    call set str!n!=%%a 
) 

    set "b=!b:partition_name: frp=!" 
    if "!b!" equ "" set flag=1 
) 
for /l %%a in (1 1 4) do (
    echo !str%%a! 
) 

pause 
+0

'findstr/R„^ Partition^linear^physisch "" scatter.txt "' ist das selbe wie Ihr Skript, aber es würde nicht den gewünschten Teil mit 'partitionsname: frp' Zeile extrahieren! – JosefZ

+0

Danke für die Antwort Herr Xingxing Qiao Ihr Code ist nett, aber ich brauche nur die FRP-Linie. – Drxtool

+0

@AndroMazo Ich habe den Code bearbeitet. –

0

Die folgende kommentiert Skript den Job tun sollten. Man beachte, dass delims leicht in zwei for /F Schleifen unterscheiden:

@ECHO OFF 
SETLOCAL EnableExtensions EnableDelayedExpansion 

set "_word=%~1"       for debugging purposes 
if not defined _word set "_word=frp" default value of partition name 

set "_right="       remove variable _right 

        REM iteration #1: GET sequence number of a data block 
set "_index=0" 
for /F "tokens=1,* delims=: " %%G in (' 
    findstr /R "partition_index partition_name" "D:\bat\SO\files\scatter.txt" 
    ') do (
    if "%%~G"=="partition_index" set /A _index+=1 
    if "%%~G"=="partition_name" if "%%~H"=="%_word%" set /A _right=_index 
) 

if not defined _right (
    echo %_word% not found as partition_name 
    goto :endscript 
) 

        REM iteration #2: USE sequence number of a data block 
set "_index=0" 
for /F "tokens=1,* delims=:" %%G in (' 
    findstr /R "partition linear physical" "D:\bat\SO\files\scatter.txt" 
    ') do (
    if "%%~G"=="partition_index" set /A _index+=1 
    if %_right% EQU !_index! echo %%G:%%H 

) 
:endscript 
ENDLOCAL 
goto :eof 

Output:

==> D:\bat\SO\42691448.bat xxx 
xxx not found as partition_name 

==> D:\bat\SO\42691448.bat metadata 
partition_index: SYS17 
partition_name: metadata 
linear_start_addr: 0x6020000 
physical_start_addr: 0x6020000 
partition_size: 0x2000000 

==> D:\bat\SO\42691448.bat 
partition_index: SYS18 
partition_name: frp 
linear_start_addr: 0x8020000 
physical_start_addr: 0x8020000 
partition_size: 0x100000 

==> 

Ressourcen (erforderlich Lesen):

+0

Ihr Code funktioniert Sir für SYS17 zu SYS19 im sorry aber ich habe vergessen, dass es auch SYS0 bis SYS24 für die gesamte scatter.txt je nach Gerät gibt. Also meine Erwartung ist, wenn es Frp in Scatter-Datei gibt es die FRP-Zeile und seine linear_start_addr: 0x8020000, physical_start_addr: 0x8020000 und seine Partition_size: 0x100000, wenn es keine FRP dann Echo FRP nicht gefunden ... – Drxtool

+0

Ich erwarte das nicht Es könnte mehr Partitionen mit dem gleichen Namen geben, aber ich kenne eine Lösung für den Fall (durch eine kleine Anpassung des aktuellen). Der Fall _wenn es kein frp_ gibt, ist bereits abgedeckt, siehe 'echo% _word% nicht gefunden als Partition_name' Zeile im Skript und' xxx nicht gefunden als Partitionsname' in der Ausgabe (für einen fiktiven 'xxx' Partitionsnamen). – JosefZ

+0

Ja, Sie hatten Recht, Sir, Sie haben das "% _word% not found als partition_name" angegeben und ich danke Ihnen für Ihre Mühe, Sir, und es tut mir leid, dass ich nicht angegeben habe, dass es mehr Partitionen gibt, die ich nicht eingeschlossen habe. Außerdem kann scatter.txt je nach Modell variieren. – Drxtool