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

Printed on: April 18, 2024 at 17:04 o'clock

Member: Biber
Biber Jul 12, 2005 at 08:44:54 (UTC)
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
Member: NetzAdmin
NetzAdmin Jul 12, 2005 at 08:58:33 (UTC)
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????
Member: Biber
Biber Jul 12, 2005 at 09:11:35 (UTC)
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
Member: NetzAdmin
NetzAdmin Jul 12, 2005 at 10:45:12 (UTC)
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.
Member: Biber
Biber Jul 12, 2005 at 11:13:29 (UTC)
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]