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-Key: 314525

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

Printed on: April 20, 2024 at 04:04 o'clock

Mitglied: 129813
129813 Sep 06, 2016 updated at 17:48:30 (UTC)
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
Member: Tomilai
Tomilai Sep 06, 2016 at 19:08:17 (UTC)
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
Member: rubberman
rubberman Sep 06, 2016 at 19:30:54 (UTC)
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
Member: Tomilai
Tomilai Sep 06, 2016 at 21:52:16 (UTC)
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
Member: rubberman
rubberman Sep 06, 2016 at 22:11:57 (UTC)
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
Member: Tomilai
Tomilai Sep 06, 2016 at 23:06:51 (UTC)
Goto Top
Hallo Rubberman,

es hat geklappt, vielen vielen Dank.

Schöne Grüße
Thomas
Member: Tomilai
Tomilai Sep 12, 2016 at 13:45:06 (UTC)
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
Member: rubberman
Solution rubberman Sep 12, 2016 at 18:45:28 (UTC)
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
Member: Tomilai
Tomilai Sep 14, 2016 at 11:34:54 (UTC)
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
Mitglied: 129813
129813 Sep 14, 2016, updated at Mar 14, 2023 at 11:06:02 (UTC)
Goto Top
Zitat von @Tomilai:
Könntest du mir eine Literaturquelle empfehlen wo man sowas finden kann?

Tutorial zur FOR-Schleife

face-wink
Regards
Member: Tomilai
Tomilai Sep 14, 2016 at 14:30:20 (UTC)
Goto Top
Danke ;)
Greetings