
.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