.txt 파일의 문자열을 필터링하고 .json 파일의 출력 형식을 지정합니다.

.txt 파일의 문자열을 필터링하고 .json 파일의 출력 형식을 지정합니다.

.txt 파일의 문자열을 필터링하고 출력 형식을 .json 파일로 지정하는 .bat 스크립트를 만들려고 합니다.

내 .txt 파일에는 다음과 같은 줄이 포함되어 있습니다.

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  

대상 .json 파일은 프로그램을 구성하기 위한 파일이며 원하는 레이아웃에서 필터링된 문자열은 다음과 같습니다.

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

내 script.bat:

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

TYPE Accounts.json

저는 html과 css만 공부했고 배치파일은 해본 적이 없는데 어떤 도움이라도 주시면 감사하겠습니다.

답변1

.json 형식의 미성년자를 위한 레이아웃 및 기타 항목에 대해 잘 알지 못하지만 질문에 제공된 레이아웃에서 일부 파일을 생성하고 예상 출력에 맞게 문자열 형식을 가져오는 처리를 수행하는 박쥐를 만들었습니다. 내가 이해한 것(더 적었을 때)..

  • 이것은 먼저 귀하와 동일한 파일을 생성한 다음 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


줄/문자열의 형식 지정/조작을 수행하고 .json 파일을 얻으려면 하나 이상의 for 루프가 필요합니다.

내 테스트 파일(이름 및 내용):

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

  • 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"
  }
] 


  • 이 코드를 다른 이름으로 저장 any_name.cmd하고 .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

관련 정보