dmaaan
Goto Top

Stringsuche in txt und vorherige Zeile extrahieren

Hallo miteinander,

da ich hier schon sehr viele kompetente Hilfsbeiträge gelesen habe hoffe ich, dass es auch für mein Problem eine Lösung gibt :

Ich möchte eine Textdatei nach einem bestimmten String durchsuchen, der String hat immer die Form "Buchstabe:", also z.B.

J:

Es geht darum, dass ich mit dem Befehlt mountvol die verschiedenen Datenträger aufliste, die Liste nach dem gewünschten Buchstaben durchsuche
und bei einem Treffer einen Teil der vorherigen Zeile in einen String speichere.

Inhalt meiner Textdatei:

Erstellt, l”scht oder listet einen Volumebereitstellungspunkt auf.

MOUNTVOL [Laufwerk:]Pfad Volumename
MOUNTVOL [Laufwerk:]Pfad /D
MOUNTVOL [Laufwerk:]Pfad /L
MOUNTVOL [Laufwerk:]Pfad /P
MOUNTVOL /R
MOUNTVOL /N
MOUNTVOL /E

Pfad Gibt das (bereits vorhandene) NTFS-Verzeichnis an, auf dem der
Bereitstellungspunkt eingerichtet werden soll.
Volumename Gibt den Namen des bereitzustellenden Volumes an.
/D L”scht den Bereitstellungspunkt vom angegebenen Verzeichnis.
/L Zeigt den Namen des bereitgestellten Volumes fr das
angegebene Verzeichnis an.
/P Entfernt den Volumebereitstellungspunkt vom angegebenen
Verzeichnis, entfernt die Volumebereitstellung und setzt das
Volume nicht mehr bereitstellbar.
Sie k”nnen das Volume wieder bereitstellbar machen, indem Sie
einen Volumebereitstellungspunkt erstellen
/R Entfernt Verzeichnisse fr Volumebereitstellungspunkte und
Registrierungseinstellungen fr Volumes d. im System nicht mehr
existieren.
/N Deaktiviert das automatische Bereitstellen neuer Volumes.
/E Aktiviert das automatische Bereitstellen neuer Volumes wieder.

M”gliche Werte fr VolumeName mit aktuellen Bereitstellungspunkten:

\\?\Volume{341e1d61-594d-11de-b993-806e6f6e6963}\
* KEINE BEREITSTELLUNGSPUNKTE *

\\?\Volume{341e1d5f-594d-11de-b993-806e6f6e6963}\
* KEINE BEREITSTELLUNGSPUNKTE *

\\?\Volume{341e1d71-594d-11de-b993-806e6f6e6963}\
G:\

\\?\Volume{7c93c6f3-5bef-11de-88c5-001d605cbed4}\
I:\

\\?\Volume{341e1d60-594d-11de-b993-806e6f6e6963}\
C:\

\\?\Volume{69871728-67e8-11de-9dbe-001d605cbed4}\
J:\

\\?\Volume{341e1d72-594d-11de-b993-806e6f6e6963}\
H:\

\\?\Volume{8f903bfb-67c2-11de-b33e-001d605cbed4}\
D:\

\\?\Volume{9b457b0d-6750-11de-8f3a-001d605cbed4}\
Das System kann die angegebene Datei nicht finden.
\\?\Volume{341e1d66-594d-11de-b993-806e6f6e6963}\
A:\

\\?\Volume{341e1d64-594d-11de-b993-806e6f6e6963}\
E:\

\\?\Volume{341e1d65-594d-11de-b993-806e6f6e6963}\
F:\


Die Variable mit dem Buchstaben, die übergeben wird, heißt %ED%. Eine besonderheit hierbei muss noch sein,
dass nach dem Buchstaben VOR der Variablen gesucht wird, also wenn ich zum Beispiel in %ED% I: übergeben bekomme,
soll an die Suchfunktion H: übergeben werden.

Wenn nun in der txt H: gefunden wird, sollte die darüberliegende Zeile


"\\?\Volume{341e1d72-594d-11de-b993-806e6f6e6963}\"


in einem String gespeichert werden.


Hintergrund ist, dass ich das Mounten eines mit TrueCrypt verschlüsselten EXTERNEN Laufwerks automatisieren will, unabhängig davon, an welchem PC ich es anschließe und wie dort die Laufwerksbuchstabenbelegungen sind.
Meine Festplatte ist in zwei Partitionen unterteilt, auf der zweiten Partition läuft TrueCrypt, dass beim Anschließen automatisch das Laufwerk durch Starten der Bat (bis auf die Passworteingabe) entschlüsseln soll. Hierzu lasse ich
erst die Roots aller Laufwerksbuchstaben nach einer bestimmten File durchsuchen die auf meiner zweiten Partition liegt, wenn diese gefunden wird weiß ich, dass der vorherige Laufwerksbuchstabe zur ersten - verschlüsselten - Partition gehört, deshalb wähle ich den Buchstaben, der vor dem liegt, der in %ED% gespeichert ist.
Mit dem extrahierten String (\\?\Volume{341e1d72-594d-11de-b993-806e6f6e6963}\) kann ich mir nun einen Startparameter für TrueCrypt zusammenbauen.

Soweit die Theorie, in der Praxis haperts leider noch etwas im Bereich "Durchsuchen der Textdatei", ich hoffe ihr könnt mir hier helfen und ich hoffe, mein Beitrag ist nicht zu ausführlich.

Mit freundlichen Grüßen,

DMaaan

Content-Key: 119946

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

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

Member: rubberman
rubberman Jul 08, 2009 at 00:24:07 (UTC)
Goto Top
Versuch mal was in der Art:
@echo off &setlocal

:: dein Vorspiel: (nur zu Testzwecken %ED% mit Wert I:)
Set "ED=I:"  


:: ****Start
:: deine Textdatei (anpassen):
set file=c:\test\mountvol.txt

Set "EDshort=%ED:~0,1%"  
Set "LW=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"  
for %%a in (%LW%) do (
if defined EDfind goto weiter
call :sub1 %%a
)
:weiter
for /f "tokens=*" %%a in (%file%) do (  
if defined string goto Verarbeitung
call :sub2 %%a
)

:sub1
if defined lwbefore (
 if %EDshort%==%1 set "EDfind=%lwbefore%:\"  
)
set "lwbefore=%1"  
goto :eof

:sub2
if defined linebefore (
 if %EDfind%==%1 set "string=%linebefore%"  
)
set "linebefore=%1"  
goto :eof
:: ***Ende


:Verarbeitung
:: ab hier dein weiterer Code: (nur zu Testzwecken Ausgabe von %string%)
echo %string%
pause
Member: DMaaan
DMaaan Jul 08, 2009 at 08:23:46 (UTC)
Goto Top
Vielen Dank, funktioniert perfekt!

MfG DMaaan