wemdas
Goto Top

Zeichen an einer bestimmten Stelle aus einer Textdatei auslesen

Hallo und Guten Tag Forums-Teinehmer,

dies ist meine erste Frage, die ich an dieses Forum stelle. Ich kam durch meine Internetrecherche auf diese Plattform, als ich nach einer Lösung zu meinem Problem gesucht habe.
Mein Problem ist anscheinend gar nicht so schwierig und auch gar nicht neu, wie es mir scheint. Ich fand einige Fragestellungen/Lösungen ähnlich meines Wunsches:

Aus einer Textdatei ohne Leerzeichen (2.txt) sollen an einer bestimmten Stelle (ab dem 33-ten Zeichen) eine bestimmte Anzahl Zeichen (z.B. 2 Zeichen) ausgelesen werden und in einer neuen Datei (2neu.txt) gespeichert werden.
Vielleicht gibt es auch eine Möglichkeit nach "(" zu suchen und dann mit +2 Zeichen zu arbeiten? Dadurch wäre dann die Länge des Verzeichnises egal. Dazu fand ich allerdings keinen Beitrag. Daher mal diese "Schmalspur"-Version von mir als Laien.

Beispiel
Inhalt von 2.txt:
c:\odr\20063063.WRI:1-1:0.9.2(080803)
c:\odr\20063064.WRI:1-1:0.9.2(090205)
c:\odr\20063065.WRI:1-1:0.9.2(100106)

Ergebnis in 2neu.txt soll lauten:
08
02
01

Hier mein bisheriger Stand (mit Hilfe dieses Forums):
@echo off &setlocal
set Quelle=2.txt
set Ziel=2neu.txt

type nul>"%Ziel%"
for /f "usebackq delims=" %%i in ("%Quelle%") do (
set "Zeile=%%i"
"%Ziel%" echo !Zeile:~33,2!)

Als Ergebnis bei meinen unzähligen Versuchen in der Datei 2neu.txt erhalte ich immer nur:
!Zeile:~2,4!
!Zeile:~2,4!

Kann das vielleicht daran liegen, dass ich die .bat-Datei unter Win2000 mit dem normalen Editor geschrieben habe? Ich bin ratlos. Bitte helft mir weiter.


Besten Dank schon mal im Voraus
Gruß
Wemdas

Content-Key: 132799

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

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: rubberman
rubberman 06.01.2010 um 12:40:53 Uhr
Goto Top
Hallo wemdas,

der Hauptfehler ist das fehlende "enabledelayedexpansion".
@echo off &setlocal enabledelayedexpansion
set Quelle=2.txt
set Ziel=2neu.txt

type nul>"%Ziel%"  
for /f "usebackq delims=" %%i in ("%Quelle%") do (  
set "Zeile=%%i"  
>>"%Ziel%" echo !Zeile:~32,2!)  

Grüße
rubberman
Mitglied: wemdas
wemdas 06.01.2010 um 12:47:49 Uhr
Goto Top
Hallo rubberman,

einfach genial. Ich bin sprachlos. Prima, besten Dank.
Der Name rubberman ist mir schon in mehreren Beiträgen aufgefallen. Einen Vorschlag und der passte auf anhieb.

Ich möchte nun nicht unverschämt sein, aber darf ich noch nach einer Lösung fragen, so quasi suche nach "(" und dann 2 Zeichen weiter liste mir die nächsten 2 Zeichen in die Datei neu2.txt?

Nochmals tausend Dank.
Mitglied: rubberman
rubberman 06.01.2010 um 13:37:23 Uhr
Goto Top
Hallo wemdas,

solange vor der besagten "(" nicht bereit schon eine ist, sollte es mit dieser kleinen Abwandlung gehen:

@echo off &setlocal enabledelayedexpansion
set Quelle=2.txt
set Ziel=2neu.txt

type nul>"%Ziel%"  
for /f "usebackq delims=( tokens=2" %%i in ("%Quelle%") do (  
set "Zeile=%%i"  
>>"%Ziel%" echo !Zeile:~2,2!)  

Grüße
rubberman
Mitglied: wemdas
wemdas 06.01.2010 um 13:47:17 Uhr
Goto Top
rubberman, ich bin sprachlos.

Hat auch bei mir auf Anhieb funktioniert.
Dieser erste Kontakt hat mich sehr gefreut und hat mir auch sehr geholfen.
Danke und auch Danke an dieses Forum.
Mitglied: potshock
potshock 06.01.2010 um 22:34:06 Uhr
Goto Top
Hallo rubberman,

ich nutze die Gelegenheit und und klinke mich hier mal ein face-wink.

Ich möchte in meiner Txt-Datei in jeder Zeile alle Zeichen nach dem 30 angezeigt bekommen.

Bisher behelfe ich mich mit einem festen Wert von dem ich annehme, er wird nicht überschritten, da es sich um Laufwerkspfade incl. Dateinamen handelt, aber wie lautet die korrekte Syntax?

"%Ziel%" echo !Zeile:~30,250!)


T@cky
Mitglied: Biber
Biber 07.01.2010 um 00:43:36 Uhr
Goto Top
Moin potshock,

die korrekte Syntax wäre gemäß der CMD-Hilfe zu SET (help set -oder set /?)
Wenn die Länge nicht angegeben ist, wird der Rest des Variablenwerts verwendet.

...demnach so:
....
>>"%Ziel%" echo !Zeile:~30!)
..für alles ab Zeichen 31 bis zum bitteren bzw. rechten Ende.

Grüße
Biber
Mitglied: potshock
potshock 07.01.2010 um 01:23:15 Uhr
Goto Top
Moin Bieber,

danke Dir!
Auch für die um diese Urzeit so prompte Antwort.

Ich wünsche eine gute Nacht

Potshock