tomilai
Goto Top

Einzelne Zeile eines TXT Files mittels Batch kopieren und in separate TXT Files nummerisch speichern

Hallo,
ich hoffe der Title verwirrt nicht all zu sehr.
Also, ich habe eine Textdatei bestehen aus 100 Zeilen.
Ich möchte all diesen Zeilen in separaten Textdateien nummerisch speichern.

Original File:
PC_Berta
PC_Thomas 
PC_Richard
PC_Wilfrid 
PC_Otto
PC_Simon 
PC_Christoph
PC_Ingrid
PC_Thorsten
PC_Hans 
PC_Josef
PC_Manfred
...

Ich möchte sie so haben:
Z.B für PC_Berta: Computer von 01.txt
Z.B für PC_Thomas: Computer von 02.txt
...usw

Ich habe das probiert:
00 @echo off
01
02 for /F %%i in (test.txt) do (
03 
04 echo %%i>>Computer von%%i.txt
05 
06 pause
)

Es ergibt separate Textdateien mit den entsprechenden Zeilen, nur das Problem, ich weiß nicht wie und wo könnte ich den "Zähler" einbauen?
Ich habe eine Variable "count" mit 0 initialisiert direkt nach den echo (Zeile 01), und sie dann inkrementiert in der Schleife(Zeile 03). Die Zeile 04 sah aber so aus
echo %%i>>Computer von%count%.txt
Irgendwie findet das Inkrementieren gar nicht statt, und das Ergebnis war nur eine Textdatei, die zeilenweise erfüllt wird mit dem Inhalt der Originaldatei.

Hat jemand eine Idee wie man das besser handhaben könnte?
Vielen Dank
Thomas

Content-ID: 314525

Url: https://administrator.de/contentid/314525

Ausgedruckt am: 25.11.2024 um 06:11 Uhr

129813
129813 06.09.2016 aktualisiert um 19:48:30 Uhr
Goto Top
@echo off & setlocal enabledelayedexpansion
REM list every line with the line-number prefixed and separated by colon
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "C:\test.txt"') do (  
  REM add leading zeros 
  set "counter=00%%a"  

  REM select always 3 digits
  set "counter=!counter:~-3!"  

  REM echo out content to file with counter
  echo %%b>"Computer von !counter!.txt"  
)
Regards
Tomilai
Tomilai 06.09.2016 um 21:08:17 Uhr
Goto Top
Hallo Highload
vielen lieben Dank, es funktioniert wie erwünscht, danke noch mal.
Ich habe jetzt nur einen kleinen "Schöheitsfehler" und zwar die Textdateien sehen wie folgt aus:
Computer von 01  .txt
Computer von 02  .txt
Computer von 03  .txt
...usw
Und ich möchte gerne das Leerzeichen zwischen Nummer und Dateiendung weghaben
Z.B.:
Computer von 01  .txt --> Computer von 01.txt
Computer von 02  .txt-->  Computer von 02.txt
Computer von 03  .txt-->  Computer von 03.txt

Danke
rubberman
rubberman 06.09.2016 um 21:30:54 Uhr
Goto Top
Hallo Tomcruise.

Wahrscheinlich hast du bei einer der SET Anweisungen in Zeile 5 oder 8 ein Leerzeichen am Ende der Zeile. Setze die Zuweisungen in Anführungszeichen um das auszuschließen.
set "counter=00%%a"
set "counter=!counter:~-3!"

Grüße
rubberman
Tomilai
Tomilai 06.09.2016 um 23:52:16 Uhr
Goto Top
Hallo Rubberman,
vielen vielen lieben dank, genau wie erwünscht. Danke face-smile
Eine letzte Frage hätte ich noch face-smile
Die Original-Datei (Textdatei bestehend aus 50 Einträge) ist in Wahrheit 5 Textdateien bestehend jeweils aus 10 Einträge.
D.h. die erste Aufgabe wäre zuerst aus den 5 Textdateien eine zu machen.

Wie kann man die 5 Dateien (alle) in einer Batch einlesen und daraus eine einzelne Textdatei machen?

00 @echo off
01
02 for /F %%i in (test1.txt) do (
03 
04 echo %%i>>Test.txt
05 
06 )
07 for /F %%i in (test2.txt) do (
08 
09 echo %%i>>Test.txt
10 
11 )
...usw
Ich glaube es geht noch einfacher.
Vielen Dank und Schöne Grüße
rubberman
rubberman 07.09.2016 um 00:11:57 Uhr
Goto Top
Hallo Tomcruise.

Sofern die jeweils letzte Zeile der Textdateien mit einem Zeilenumbruch abgeschlossen sind, genügt ein einziger COPY Befehl.
copy /b "test1.txt" + "test2.txt" + "test3.txt" + "test4.txt" + "test5.txt"  "Test.txt"  

Grüße
rubberman
Tomilai
Tomilai 07.09.2016 um 01:06:51 Uhr
Goto Top
Hallo Rubberman,

es hat geklappt, vielen vielen Dank.

Schöne Grüße
Thomas
Tomilai
Tomilai 12.09.2016 um 15:45:06 Uhr
Goto Top
Hallo Rubberman,
danke noch mal. Ich bin jetzt auf eine ähnliche Situation gestoßen:
Ich hab einen 2ten Satz bekommen, der so aussieht:
Computer von 31 .txt, 
Computer von 32 .txt,
Computer von 33 .txt,
D.h, der Inhalt meines neuen Ordners sieht wie oben aus.
Und möchte das gerne genauso wie vorhin verschieben, nur es muss jetzt mit 31 anfangen.
Computer von 31.txt --> Computer von 31.txt
Computer von 32.txt--> Computer von 32.txt
Computer von 33.txt--> Computer von 33.txt
...usw.

Ich hab einiges verändert an den Code, aber es springt immer in der Textdatei auf dem Index 31.

Könntest du, oder jemand helfen??
Danke und schöne Grüße
Thomas
rubberman
Lösung rubberman 12.09.2016 um 20:45:28 Uhr
Goto Top
Hallo Thomas

Ungetestet:
@echo off & setlocal enabledelayedexpansion
set "initial=30"  
REM list every line with the line-number prefixed and separated by colon
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "C:\test.txt"') do (  
  REM calculate new number and add leading zeros
  for /f %%c in ('set /a initial + %%a') do set "counter=00%%c"  

  REM select always 3 digits
  set "counter=!counter:~-3!"  

  REM echo out content to file with counter
  echo %%b>"Computer von !counter!.txt"  
)
Grüße
rubberman
Tomilai
Tomilai 14.09.2016 um 13:34:54 Uhr
Goto Top
Vielen Dank Rubberman, es hat sehr gut geholfen. Könntest du mir eine Literaturquelle empfehlen wo man sowas finden kann?
Vielen Dank nochmals
Schöne Grüße
Thomas
129813
129813 14.09.2016, aktualisiert am 14.03.2023 um 12:06:02 Uhr
Goto Top
Zitat von @Tomilai:
Könntest du mir eine Literaturquelle empfehlen wo man sowas finden kann?

Tutorial zur FOR-Schleife

face-wink
Regards
Tomilai
Tomilai 14.09.2016 um 16:30:20 Uhr
Goto Top
Danke ;)
Greetings