bugger
Goto Top

Teil vom Dateinamen als Variable

Hallo,

ich möchte aus einem Dateinamen 3 Zeichen auslesen und als Variable nutzen können. Die 2 der 3 Zeichen unterscheiden sich aber immer. Fängt immer mit E an gefolgt von zwei Zahlen zwischen 01 bis 25. Die Anzahl an Zeichen vor und nach diesen dreien unterscheiden sich ebenfalls. Also müsste irgendwie im Dateinamen gesucht werden. Falls es relevant ist, vor und nach diesem Codeblock liegen weitere Befehle. Daher muss es auch ein Batch Lösung sein.

Geht das irgendwie? Danke im Voraus face-smile


Und noch eine Frage nebenbei, gibt es einen Befehl, der das cmd Fenster vom schließen abhält wenn eine Formel einen Fehler hat? Pause funktioniert nicht.

Content-ID: 217848

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

Ausgedruckt am: 04.12.2024 um 08:12 Uhr

Endoro
Endoro 25.09.2013 um 16:36:11 Uhr
Goto Top
Hi, ein Vorschlag:
for /f "delims=" %%a in ('dir /b /a-d ^|grep -Eo "E[0-9][0-9]"') do (  
    echo %%a
)
grep for Windows
lg.
Bugger
Bugger 25.09.2013 um 17:27:50 Uhr
Goto Top
Danke, aber gibt es auch eine Möglichkeit ohne zusätzliche Software?
Endoro
Endoro 25.09.2013 aktualisiert um 19:09:54 Uhr
Goto Top
Ja, du könntest ein "Hybridscript" (JScript/Batch) nehmen, da muss nichts installiert werden weil es vom WSH direkt unterstützt wird. Es gibt einige im Netz, zB dieses. Du ersetzt den 'grep'-Aufruf einfach damit:
repl ".*(E\d\d).*" "$1"  
lg.
Bugger
Bugger 25.09.2013 aktualisiert um 19:29:27 Uhr
Goto Top
Hmm, und eine Lösung die komplett auf zusätzliche scripte oder ähnliches verzichtet? Ich hatte sowas hier schon gesehen, allerdings wurde dort nie etwas aus der Mitte des Namens genommen. Etwas kurzes ohne Java.Sodass man auch noch durchblickt bei der Batch Datei.
bastla
bastla 25.09.2013 um 19:55:53 Uhr
Goto Top
Hallo Bugger!

Kann vor dem gesuchten Namensbestandteil ein weiteres "E" (oder "e") enthalten sein? Können die 3 Zeichen auch am Beginn des Dateinamens stehen?

Bei zweimal "nein" könntest Du die Zerlegung so versuchen (ungetestet):
for /f "delims=" %%i in ('dir /b /a-d *E*.*') do (  
    for /f "delims=e" %%a in ("%%~ni") do (  
        set "Name=%%b"  
        setlocal enabledelayedexpansion
        echo E!Name:~,2!
        endlocal
    )
)
Grüße
bastla
Bugger
Bugger 25.09.2013 um 20:23:11 Uhr
Goto Top
In der Art hatte ich mir das vorgestellt. Allerdings können auch noch andere E in dem Dateinamen vorkommen, daher kommt man mit *E* wohl nicht soweit.

Was mir jetzt erst einfällt was vll. helfen könnte, vor dem E stehen auch immer zwei Zahlen und ein S. Also S00E00 - in der Art.
bastla
bastla 25.09.2013 aktualisiert um 20:37:19 Uhr
Goto Top
Hallo Bugger!
Allerdings können auch noch andere E in dem Dateinamen vorkommen
Magst Du auch verraten, an welchen Positionen? Meine Prämissen findest Du ja oben ...
was vll. helfen könnte, vor dem E stehen auch immer zwei Zahlen und ein S. Also S00E00 - in der Art.
Hilft hinsichlich der Zerlegung nix, da alles vor dem ersten "E" (wenn nicht das "E" am Anfang des Dateinamens steht) in "%%a" landet und schlicht ignoriert wird ...
daher kommt man mit *E* wohl nicht soweit.
Ist das das Ergebnis Deines Tests?

Grüße
bastla
Endoro
Endoro 25.09.2013 aktualisiert um 22:15:38 Uhr
Goto Top
Hi, so was ist mir noch eingefallen:
@echo off &setlocal
for /f "delims=" %%a in ('dir /b /a-d *e*^|findstr /i "E[0-2][0-9]"') do call:check "%%~na"  
goto:eof

:check
set "name=%~1"  
:loop
set "name=%name:*e=%"  
echo "%name%"|findstr /bi ".[0-2][0-9]" >nul|| goto:loop  
set "name=e%name:~0,2%"  
echo %name%
exit /b
Schön ist das aber nicht. Ich würde lieber ein bewährtes Unix-Tool oder meinetwegen JScript nehmen face-smile
lg.

PS: Dank an @Biber, ist verbessert face-smile
Biber
Biber 25.09.2013 aktualisiert um 22:08:10 Uhr
Goto Top
[bisschen OT] @ Endoro
Die Pattern für Findstr findstr /i "E[0-9][0-9]" liesse sich bei den gegebenen Anforderungen reduzieren auf findstr "E[0-2][0-9]"

Grüße
Biber
[/bisschen OT]
Bugger
Bugger 25.09.2013 aktualisiert um 22:26:11 Uhr
Goto Top
Also ich finde die Lösung sehr schön, sie funktioniert nämlich genauso wie ich mir das vorgestellt habe face-smile Vielen lieben Dank dafür! face-smile

Habe die Frage schon auf erledigt gesetzt aber meine andere Frage ist ja noch offen, auch wenn weniger wichtig.^^ Wäre aber interessant zu wissen, ob es denn einen Befehl gibt der das Fenster offen lässt bei Fehlern im Script?