netzadmin
Goto Top

STRING AUS EINER BATCHDATEI AUSLESEN

Ähnlich wie Instr(string) dem VB Kommando

Hallo Kollegen,

ich möchte gerne aus einem STRING (den hol ich mir mit einem FOR /R) auf gewisse Teile checken....

also z.B.
@echo off
for /r \\servername\ShareName\Verz\Subverz %%I in ("*.*") DO CALL :EVERY %%I
GOTO ENDE
:EVERY
ECHO %1
REM UND HIER MÖCHTE ICH z:b. Pfad vom Dateiname teilen, die 3-5 Stelle des Dateinamens wissen etc.


:ENDE

So, und wer kann mir da jetzt helfen ????

Danke

Content-Key: 13014

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

Ausgedruckt am: 28.03.2024 um 09:03 Uhr

Mitglied: Biber
Biber 12.07.2005 um 10:44:54 Uhr
Goto Top
Moin Netzadmin,

helfen kann ich. Dann sag nur noch bitte, was Du alles von diesen Dateinamen/Pfaden brauchst. Also dieses "z.B." mal ausformulieren.

Grüße
Biber
Mitglied: NetzAdmin
NetzAdmin 12.07.2005 um 10:58:33 Uhr
Goto Top
Status ist jetzt wie folgt...........
Bat ist einstweilen wie folgt.....
@echo off
for %%I in ("\\server\share\Verz\Sub1\Sub2\DR*.*") DO CALL :FOREACH %%~pI %%~nxI
GOTO ENDE
:FOREACH

ECHO Pfad ist %1
ECHO Dateiname ist %2

Dateiname ist jetzt zum Beispiel DR12345.678 oder DR34567.890

Und ich bräucht jetzt die ersten Drei Stellen des Dateinamens in einer Variable.....
Nur wie stell ich das an????
Mitglied: Biber
Biber 12.07.2005 um 11:11:35 Uhr
Goto Top
@echo off 
for /r %%I in ("\\server\share\Verz\Sub1\Sub2\DR*.*")  DO CALL :Loop %%I   
GOTO ThatsAll 
:Loop 
Set DateiName=%~n1
Set DateiName1bis3=%DateiName:~0,3%
ECHO Komplett:%1 Nur Name: %DateiName% Name1-3: %DateiName1bis3%  
goto :eof

:ThatsAll

Hope It Helps
Biber
Mitglied: NetzAdmin
NetzAdmin 12.07.2005 um 12:45:12 Uhr
Goto Top
SUPER SUPER - DANKE

Jetzt wo ich es sehe, erinnere ich mich auch daran.............

Noch eine Frage, könnt ich eigentlich den letzten Teil des Pfades (also das letzte Verzeichnis) auch irgendwie extrahieren ????

for %%I in ("\\server\share\Verz\Sub1\Sub2\DR*.*") DO CALL :FOREACH %%~pI

Somit eigentlich "Sub2".........???

Sch... dass es die ganzen Substr Trim und Find aus VB nicht gibt (zumindest nicht ohne MSET.......Und MSET willi ich nicht verwenden.
Mitglied: Biber
Biber 12.07.2005 um 13:13:29 Uhr
Goto Top
Mmmmja, Netzadmin,

gehen tut das - Aufwand hängt davon ab, wie variabel es sein soll
Wenn Du die Pfadebene ABSOLUT kennst, ist es Spielerei.

for /F "delims=\ tokens=4" %i in ("\\server\share\Verz\Sub1\Sub2\") do echo %i

(Output: ) Sub1

...so könntest Du die vierte Ebene meinetwegen rausfiltern

..Zum Beispiel also...
for /F "delims=\ tokens=4" %i in ("\\server\share\Verz\Sub1\Sub2\") do Set VarDirname=%i                  
Wenn du die Ebene nur RELATIV weißt ( meinetwegen immer die vorletzte), dann müsste man wieder ein kleines Loop innerhalb eines Bätchelchens einbauen, um die Anzahl der Unterpfade/der Argumente zu ermitteln.
for /F "delims=\ tokens=1-5" %%i in ("\\server\share\Verz\Sub1\Sub2\") do goto :loop %%i %%j %%k %%l %%m   
goto Ende
:loop
if (%5)==() set Vorletztes=%3
if (%4)==() set Vorletztes=%2
if (%3)==() set Vorletztes=%1
if (%2)==() (echo Fehler...gibt kein Vorletztes) & (goto :eof)
echo Vorletztes Unterverzeichnis ist %Vorletztes%
goto :eof

:ende
Geht bestimmt auch eleganter... aber als Skizze reichts.

Wenn es ums LETZTE Unterverzeichnis geht, reicht ein Einzeiler (5 Ebenen max. angenommen):

for /F "delims=\ tokens=1-5" %i in ("\\server\share\Verz\Sub1\Sub2\") do for %a in (%i %j %k %l %m) do set Letztes=%a

Grüße
Biber
[Edit] Tipp/Denkfehlerkorrektur [/Edit]