2016-08-08 4 views
2

새 I2C 일괄 스크립트와 여기에 각 텍스트 파일을 각 1 백만 행의 청크로 분할하려고했습니다. 청크 파일은 예상대로 생성되지만 출력 파일 내용에는 감탄 부호 (!)가 누락되어 있으며 감탄 부호 다음에 나오는 열을 건너 뜁니다. 원본 파일 그대로 데이터를 가져 오도록 도와주세요!배치 스크립트를 통해 txt 파일을 분할하는 동안 깜박이는

@ECHO OFF 
setLocal DisableDelayedExpansion 

set limit=1000000 
set feed_name=test.txt 
set file=%Tgt_Dir%\%feed_name% 
set lineCounter=1 
set filenameCounter=1 
set name= 
set extension= 


for %%a in (%file%) do (
    set "name=%%~na" 
    set "extension=%%~xa" 
) 

setlocal enabledelayedexpansion 
for /f "tokens=*" %%a in (%file%) do (
    set splitFile=!name!%date:~12,2%%date:~4,2%%date:~7,2%!filenameCounter!!extension! 
    if !lineCounter! gtr !limit! (
     set /a filenameCounter=!filenameCounter! + 1 
     set lineCounter=1 
     echo Created !splitFile!. 
    ) 
    echo %%a>> %Tgt_Dir%\!splitFile! 

    set /a lineCounter=!lineCounter! + 1 
) 
endlocal 

탭 구분 기호 파일입니다.

스크린 샷은 enter image description here

답변

1

당신은 지연 확장을 전환 할 필요가있다.

setlocal DisableDelayedExpansion 
for /f "tokens=*" %%a in (%file%) do (
    Set "line=%%a" 
    setlocal EnableDelayedExpansion 

     set splitFile=!name!%date:~12,2%%date:~4,2%%date:~7,2%!filenameCounter!!extension! 

     echo(!line!>> %Tgt_Dir%\!splitFile! 

    if !lineCounter! gtr !limit! (
     ENDLOCAL 
     set /a filenameCounter+=1 
     set lineCounter=1 
     echo Created file 
    ) ELSE ENDLOCAL 
    set /a lineCounter=lineCounter + 1 
) 
+0

정말 고마워, 심지어이 문제에 대한 또 다른 스레드를 읽어보십시오. [링크] (http://stackoverflow.com/questions/10964923/reading-a-file-with-special-characters-in-batch) 위의 제안 된 변경 사항을 적용한 후에도 여전히 오류가 발생합니다. 이제 척이 생성됩니다. ** % A ** – CIPHER

+0

@CIPHER를 보여주는 각 줄과 내용에 대해 @CIPHER 나는 '%% a' 대신에'%% A'를 썼습니다. 이제는 그것을 고쳤습니다. 그리고 라인의 버그! lineCounter! gtr! 한계! '지연 확장이 여전히 활성화되어 있어야합니다. 따라서 비교 후 바로 끝 부분을 ELSE 부분으로 옮깁니다. – jeb

+0

감사합니다. jeb에서 처음에 %% A에 액세스 할 때 문제가 발견되었지만 나중에 다른 방법으로 문제를 해결할 수있었습니다. 결과를 얻는다. – CIPHER