2016-08-08 73 views
2

Ich bin neu zu Batch-Skript und hier habe ich versucht, meine Textdatei in Stücke für jede 1 Million Zeilen zu teilen. Chunk-Dateien werden wie erwartet generiert, aber innerhalb des Inhalts der Ausgabedatei fehlen die Ausrufe (!) Und sogar das Überspringen der unmittelbaren Spalte nach Exclamation. Bitte helfen Sie mir, Daten wie in der ursprünglichen Datei in Stücke zu bekommen!Beim Aufteilen der TXT-Datei durch Batch-Skript Ausrufe werden

@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 

Es ist eine Tab-Delimiter-Datei.

ScreenShot enter image description here

Antwort

1

Sie müssen verzögerte Expansion wechseln.

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

Wirklich danke für Ihren Vorschlag, auch ich lese Ihren anderen Thread auch zu diesem Thema. [link] (http://stackoverflow.com/questions/10964923/reading-a-file-with-special-characters-in-batch) Aber auch nach den oben vorgeschlagenen Änderungen, bekomme ich immer noch Fehler - Jetzt Chucks erstellen für jede Zeile und Inhalt zeigt **% A ** – CIPHER

+0

@CIPHER Ich schrieb '%% A' anstatt' %% a', jetzt habe ich es behoben. Und auch ein Fehler in der Zeile "if! LineCounter"! gtr! limit! 'da muss die verzögerte Erweiterung noch aktiviert sein, daher habe ich das Endlocal direkt nach dem Vergleich verschoben, und auch in den ELSE Teil – jeb

+0

Danke jeb, ich habe anfangs Problem beim Zugriff auf %% A erkannt, aber später mit deinen anderen Modifikationen kann ich das Ergebnisse bekommen. – CIPHER