Filtre cadenas en archivos .txt y formatee la salida en un archivo .json

Filtre cadenas en archivos .txt y formatee la salida en un archivo .json

Estoy intentando crear un script .bat para filtrar cadenas en archivos .txt y formatear la salida en un archivo .json.

Mis archivos .txt contienen líneas como esta:

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  

El archivo .json de destino es el archivo para configurar un programa y las cadenas filtradas en el diseño deseado resultarían así:

[
  {
    "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"
  }
]

Mi script.bat:

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

TYPE Accounts.json

Solo estudié html y css, nunca hice archivos por lotes y cualquier ayuda estaría agradecida gracias.

Respuesta1

Aunque no tengo mucho conocimiento sobre el diseño y otros para menores del formato .json, creé un bat que genera algunos archivos en el diseño informado en la pregunta y hace un tratamiento para formatear las cadenas para el resultado esperado (o lo que entendí cuando menos)..

  • Este es mi bat que primero crea los mismos archivos que el tuyo y luego procesa/devuelve el json.
@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


Necesita más de un bucle for para realizar este formateo/manipulación de líneas/cadenas y obtener su archivo .json.

Mis archivos de prueba (nombre y contenido):

  • .\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

  • Contenido obtenido de Target.json
[
  {
    "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"
  }
] 


  • Guarde este código any_name.cmde intente ejecutarlo en la misma carpeta donde tiene los archivos .txt.
@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

información relacionada