%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%8B%A4%EB%A5%B8%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%83%9D%EC%84%B1%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%20%EC%88%98%EC%A0%95.png)
다음 텍스트 파일이 있다고 가정해 보겠습니다.
1234567890123456789012345678901234567890123456789012345678901234567890
_________1_________2_________3_________4_________5_________6_________7
*0000000000003000345800185000000000000002052017108018010009990
*000000000000302082890010000000000T SECTEUR SANITAIRE JIJEL 1
*000000000000306758680008500000000TIC ZIAMA MANSOURIAH 1
헤더와 모든 줄에는 62자가 포함됩니다. 헤더를 보고 위치 42에서 시작하면 은 022017
이번 02
달이고 2017
은 연도입니다. 위치 48부터 62까지(즉, 다음 )에는 14개의 값( )과 a (0) 052017
가 있습니다 .10801801000999
0
마지막 줄에는 다른 줄이 포함되어 있거나 동일하지 않다고 가정해 보겠습니다.
동일한 구조의 파일이 여러 개 있다고 가정해 보겠습니다. 헤더의 날짜를 현재 날짜로 설정하고 싶습니다. (현재 날짜는 2019년 8월이므로 082019
대신 헤더에 들어가고 싶습니다 052017
.) 날짜( 052017
) 뒤에 오는 값(이 경우 ( 10801801000999
)을 제거하고 헤더가 62자를 유지하는 방식으로 공백으로 바꾸고 값(0)을 유지하고 싶습니다. 누군가 작성하는 데 도움을 줄 수 있습니까? 작업을 수행하기 위한 코드(배치 파일: .bat) 특히 여러 개의 텍스트 파일이 있고 각 파일에 5000줄 이상이 포함되어 있는 경우 더욱 그렇습니다.
답변1
다음 배치는
- 현재 폴더의 *.txt 파일을 반복합니다.
- 원본 이름을 .bak 확장자로 바꿉니다.
- 헤더를 읽고 수정하여 원래 이름으로 씁니다.
- 저장된 파일의 나머지 부분을 복사하세요
BTW SuperUser는 스크립트 작성 서비스가 아니며
좀 더 많은 자체 연구 및 코딩 시도를 기대할 수 있습니다.
:: Q:\Test\2019\08\16\SU_1472064.cmd
@Echo off
:: Get MonthYear
for /f "usebackq" %%A in (`
powershell -NoP -C "(Get-Date).ToString('MMyyyy')"
`) Do Set MonthYear=%%A
:: iterate .txt files in current folder
For /f "delims=" %%F in ('Dir /B /O-D *.txt') Do Call :sub "%%~F"
Echo Job done
Goto :Eof
:Sub filename
:: Rename original file to .bak extension
Ren %1 "%~1.bak"
:: read header line
Set /p "Header=" <"%~1.bak"
Echo 1234567890123456789012345678901234567890123456789012345678901234567890
Echo _________1_________2_________3_________4_________5_________6_________7
Echo %Header%
Set "NewHeader=%Header:~0,41%%MonthYear% 0"
Echo %NewHeader%
(Echo %NewHeader%
More +1 "%~1.bak"
) > %1
샘플 출력:
> SU_1472064.cmd
1234567890123456789012345678901234567890123456789012345678901234567890
_________1_________2_________3_________4_________5_________6_________7
*0000000000003000345800185000000000000002052017108018010009990
*0000000000003000345800185000000000000002082019 0
Job done