배치(.bat) 파일을 사용하여 다른 텍스트 파일을 생성하지 않고 텍스트 파일 수정

배치(.bat) 파일을 사용하여 다른 텍스트 파일을 생성하지 않고 텍스트 파일 수정

다음 텍스트 파일이 있다고 가정해 보겠습니다.

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가 있습니다 .108018010009990

마지막 줄에는 다른 줄이 포함되어 있거나 동일하지 않다고 가정해 보겠습니다.

동일한 구조의 파일이 여러 개 있다고 가정해 보겠습니다. 헤더의 날짜를 현재 날짜로 설정하고 싶습니다. (현재 날짜는 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

관련 정보