Batch erstes Zeichen aus jeder Zeile in eine variable einspeichern und dann in .txt Löschen?

3 Antworten

Ich kann dir als Ansatz ein VBScript anbieten:

Main()

Sub Main()
  Dim fso
  Dim i, j
  Dim oFileRead
  Dim oFileWrite
  Dim sZeile(10000)

' Die ersten Zeichen einer Zeile extrahieren Set fso = CreateObject("Scripting.FileSystemObject") Set oFileRead = fso.OpenTextFile("erstezeichenextrahieren.txt", 1) Set oFileWrite = fso.OpenTextFile("erstezeichenextrahieren_out.txt", 2)
i = 0 While not oFileRead.AtEndOfStream sZeile(i) = oFileRead.ReadLine() oFileWrite.Write(Mid(sZeile(i),1,1)) i = i + 1 Wend oFileRead.Close oFileWrite.Close
' Das erste Zeichen jeder Zeile in der Originaldatei strippen Set oFileWrite = fso.OpenTextFile("erstezeichenextrahieren.txt", 2) For j=0 To i-1 oFileWrite.WriteLine(Mid(sZeile(j), 2, 1024)) Next oFileWrite.Close
Set oFileRead = Nothing Set oFileWrite = Nothing Set fso = Nothing
MsgBox "Fertig!" End Sub

Wenn du das Skript detailierter ausarbeitest, solltest du Arraygrenzen abfangen und maximale Zeilenlängen überprüfen. Die Dateinamen solltest du dynamisch übergebbar machen. Auch solltest du sicherstellen, dass du nur das Original überschreibst, wenn das Lesen geklappt haben sollte. Usf.

Woher ich das weiß:Berufserfahrung – Programmierer

Das geht in jeder Programmiersprache und hat mit einer Batch-Datei nichts zu tun (Batchfile = Stapeldatei).

Du könntest VBA oder VB Script nutzen, wenn du unter Windows arbeitest.

Du öffnest die Text-Datei und erstellst eine neue. Dann liest du die erste Zeile ein und speicherst von diesem String nur das erste Zeichen in die neue Text-Datei. Dann liest du die 2. Zeile und schreibst wieder das erste Zeichen in die neue Datei - so lange, bis die erste Datei komplett eingelesen ist. Dann schließt du die Quell-Datei, schreibst das letzte Zeichen in die Zieldatei und schließt auch diese.

That's it!


RageMode  02.06.2016, 13:56

Ich glaube er wollte ein konkretes Code-Beispiel wie man das mit Batch realisieren könnte ^^

1

(Wir brauchen verzögerte Ersetzung von Variablen, deshalb als erstes

SETLOCAL ENABLEDELAYEDEXPANSION

)

(Bitte beachten, dass im folgenden Dateiname NICHT in Anführungszeichen stehen darf, sonst wird der Name selbst statt des Dateiinhalts bearbeitet.)

FOR /F "delims=" %A IN (dateiname) DO (
SET "line=%A"
SET "first=%line:~,1%"
SET "rest=%line:~1%"
REM Zeugs mit first und rest erledigen
)

  Falls der Dateiname in Anführungszeichen stehen muss (weil z. B. eine Klammer, ein Leerzeichen oder ein sonstiges Trennzeichen wie Semikolon drin ist):

FOR /F "usebackq delims=" %A IN (`type "dateiname"`) DO (
  ... (s. o.)
)

  Wenn du nur das erste Zeichen brauchst, kannst du natürlich die Zeile mit rest weglassen.

Um die ersten Zeichen zu sammeln:

SET "ersteZeichen=."
REM in ersteZeichen muss am Anfang was drinstehen, sonst würde %ersteZeichen% zu "%ersteZeichen%" ausgewertet
FOR ... (
... (s. 0.)
  )
echo %ersteZeichen:~1% > "dateiname"
Woher ich das weiß:Berufserfahrung – Software-Entwickler

ChrizzRocks 
Beitragsersteller
 02.06.2016, 14:19

du meinst in klammern und nicht in Anführungszeichen oder?

und was meinst du mit in erstes zeichen muss was drinne stehen? was soll das heissen? :D

0
PWolff  02.06.2016, 14:35
@ChrizzRocks

Nein, ich meinte schon "in Anführungszeichen". Du kannst es ja mal ausprobieren.

Eine Umgebungsvariable kann nicht leer sein. Sonst schlägt die Ersetzung von %variablennamen% fehl.

Probier's aus:

SET test=Dies ist eine Testvariable.
ECHO %test%
SET test=
ECHO %test%

der 2. ECHO-Befehl liefert nicht wie erwartet eine leere Zeile, sondern den Text "%test%".

-----

Übrigens hab ich was vergessen:

Bei FOR in Batch-Dateien muss das % vor der Schleifenvariablen verdoppelt werden:

FOR /F "delims=" %%A IN (dateiname) DO (
SET "line=%%A"
SET "first=%line:~,1%"
SET "rest=%line:~1%"
REM Zeugs mit first und rest erledigen
)
FOR /F "usebackq delims=" %%A IN (`type "dateiname"`) DO (
  ... (s. o.)
)
0