Filtern Sie Zeichenfolgen in TXT-Dateien und formatieren Sie die Ausgabe in einer JSON-Datei

Filtern Sie Zeichenfolgen in TXT-Dateien und formatieren Sie die Ausgabe in einer JSON-Datei

Ich versuche, ein BAT-Skript zu erstellen, um Zeichenfolgen in TXT-Dateien zu filtern und die Ausgabe in eine JSON-Datei zu formatieren.

Meine TXT-Dateien enthalten Zeilen wie diese:

Server: http://viphome1.com:33000/c/ 
MAC: 00:1a:79:91:a6:cf 
Vence:July 15, 2022, 11:35 pm  
MAC: 00:1a:79:92:1a:b1 
Vence:May 6, 2022, 12:35 am  

Die Ziel-JSON-Datei ist die Datei zum Konfigurieren eines Programms. Die im gewünschten Layout gefilterten Zeichenfolgen würden wie folgt aussehen:

[
  {
    "Name": "any",
    "Address": "http://viphome1.com:33000/c/",
    "Mac": "00:1a:79:91:a6:cf"
  },
{
    "Name": "any2",
    "Address": "http://viphome1.com:33000/c/",
    "Mac": "00:1a:79:ad:83:b1"
  }
]

Mein script.bat:

@ECHO OFF
SETLOCAL
(
FOR /f "tokens=* delims=:," %%a IN (C:\Users\dom19\Desktop\first.txt) DO (
 ECHO(
)
)>Accounts.json

TYPE Accounts.json

Ich habe nur HTML und CSS studiert, ich habe noch nie Batchdateien erstellt und wäre für jede Hilfe dankbar.

Antwort1

Obwohl ich mich mit dem Layout und anderen für Minderjährige nicht gut auskenne, habe ich einen Bat erstellt, der einige Dateien im in der Frage angegebenen Layout generiert und eine Behandlung durchführt, um die Zeichenfolgen für die erwartete Ausgabe zu formatieren (oder was ich darunter verstanden habe).

  • Dies ist mein Bat, der zuerst dieselben Dateien wie Sie erstellt und dann das JSON verarbeitet/zurückgibt.
@echo off

setlocal enableDelayedExpansion
cd /d "%~dp0" & >.\Target.json echo[[

>.\File_01.txt ^
    (
     echo\Server: http://viphome1.com:33000/a/
     echo\MAC: 00:1a:79:91:a6:cf
     echo\Vence:July 15, 2022, 11:35 pm
     echo\MAC: 00:1a:79:92:1a:b1
     echo\Vence:May 6, 2022, 12:35 am
    )
>.\File_02.txt ^
    (
     echo\Server: http://viphome1.com:33000/b/
     echo\MAC: 0a:1a:79:91:a6:cf
     echo\Vence:July 15, 2022, 11:35 pm
     echo\MAC: 0b:1a:79:92:1a:b1
     echo\Vence:May 7, 2022, 12:35 am
    ) 
>.\File_03.txt ^
    (
     echo\Server: http://viphome1.com:33000/c/
     echo\MAC: 0c:1a:79:91:a6:cf
     echo\Vence:July 15, 2022, 11:35 pm
     echo\MAC: 0d:1a:79:92:1a:b1
     echo\Vence:May 8, 2022, 12:35 am
    ) 
>.\File_04.txt ^
    (
     echo\Server: http://viphome1.com:33000/d/
     echo\MAC: 0e:1a:79:91:a6:cf
     echo\Vence:July 15, 2022, 11:35 pm
     echo\MAC: 0f:1a:79:92:1a:b1
     echo\Vence:May 9, 2022, 12:35 am
    )

set _cnt=<nul & for %%G in (.\*.txt)do <con: >>.\Target.json (
     echo\  ^{& for /f useback^tokens^=1*delims^=^":^  %%i in (
        `findstr/v "Vence" ^< "%%~G"`)do if not "!_mac!" == "" (
             echo\  ^{
             set _mac=<nul
             echo;    !_name!
             echo;    !_address!
             echo;    "%%~i": "%%~j"
           ) else if /i "%%~i" == "Server" (
             set /a "_cnt+=1+0"
             set "_n=00000!_cnt!"
             set "_address="Address": "%%~j","
             echo;    "Name": "Any_!_n:~-6!",
             echo;    !_address!
           ) else (
             set "_mac=?"
             set /a "_cnt+=1+0"
             set "_n=00000!_cnt!"
             echo;    "%%~i": "%%~j"
             set "_name="Name": "Any_!_n:~-6!","
             echo;  ^},
           )
     echo\  ^}
   )

>>.\Target.json echo;] & endlocal | type .\Target.json


Sie benötigen mehr als eine For-Schleife, um diese Formatierung/Manipulation von Zeilen/Zeichenfolgen durchzuführen und Ihre JSON-Datei zu erhalten.

Meine Testdateien (Name und Inhalt):

  • .\File_01.txt:
Server: http://viphome1.com:33000/a/
MAC: 00:1a:79:91:a6:cf
Vence:July 15, 2022, 11:35 pm
MAC: 00:1a:79:92:1a:b1
Vence:May 6, 2022, 12:35 am
  • .\File_02.txt:
Server: http://viphome1.com:33000/b/
MAC: 0a:1a:79:91:a6:cf
Vence:July 15, 2022, 11:35 pm  
MAC: 0b:1a:79:92:1a:b1
Vence:May 7, 2022, 12:35 am
  • .\File_03.txt:
Server: http://viphome1.com:33000/c/
MAC: 0c:1a:79:91:a6:cf
Vence:July 15, 2022, 11:35 pm
MAC: 0d:1a:79:92:1a:b1
Vence:May 8, 2022, 12:35 am
  • .\File_04.txt:
Server: http://viphome1.com:33000/d/
MAC: 0e:1a:79:91:a6:cf
Vence:July 15, 2022, 11:35 pm
MAC: 0f:1a:79:92:1a:b1
Vence:May 9, 2022, 12:35 am

  • Von Target.json abgerufener Inhalt
[
  {
    "Name": "Any_000001",
    "Address": "http://viphome1.com:33000/a/",
    "MAC": "00:1a:79:91:a6:cf"
  },
  {
    "Name": "Any_000002",
    "Address": "http://viphome1.com:33000/a/",
    "MAC": "00:1a:79:92:1a:b1"
  }
  { 
    "Name": "Any_000003",
    "Address": "http://viphome1.com:33000/b/",
    "MAC": "0a:1a:79:91:a6:cf"
  },
  {
    "Name": "Any_000004",
    "Address": "http://viphome1.com:33000/b/",
    "MAC": "0b:1a:79:92:1a:b1"
  }
  { 
    "Name": "Any_000005",
    "Address": "http://viphome1.com:33000/c/",
    "MAC": "0c:1a:79:91:a6:cf"
  },
  {
    "Name": "Any_000006",
    "Address": "http://viphome1.com:33000/c/",
    "MAC": "0d:1a:79:92:1a:b1"
  }
  { 
    "Name": "Any_000007",
    "Address": "http://viphome1.com:33000/d/",
    "MAC": "0e:1a:79:91:a6:cf"
  },
  {
    "Name": "Any_000008",
    "Address": "http://viphome1.com:33000/d/",
    "MAC": "0f:1a:79:92:1a:b1"
  }
] 


  • Speichern Sie diesen Code unter any_name.cmdund versuchen Sie, ihn im selben Ordner auszuführen, in dem sich die TXT-Dateien befinden.
@echo off

setlocal enableDelayedExpansion
cd /d "%~dp0" & >.\Target.json echo[[

set^ _cnt=<nul& for %%G in (.\*.txt)do <con: >>.\Target.json (
     echo\  ^{& for /f useback^tokens^=1*delims^=^":^  %%i in (
        `findstr/v "Vence" ^< "%%~G"`)do if not "!_mac!" == "" (
             echo\  ^{
             set _mac=<nul
             echo;    !_name!
             echo;    !_address!
             echo;    "%%~i": "%%~j"
           ) else if /i "%%~i" == "Server" (
             set /a "_cnt+=1+0"
             set "_n=00000!_cnt!"
             set "_address="Address": "%%~j","
             echo;    "Name": "Any_!_n:~-6!",
             echo;    !_address!
           ) else (
             set "_mac=?"
             set /a "_cnt+=1+0"
             set "_n=00000!_cnt!"
             echo;    "%%~i": "%%~j"
             set "_name="Name": "Any_!_n:~-6!","
             echo;  ^},
           )
     echo\  ^}
   )

>>.\Target.json echo;] & endlocal | type .\Target.json

verwandte Informationen