Gekürzte Dateinamen in Variablen und daraus Auswahlmenü (Abfrage) erzeugen?
Hallo mitteinander.
Es wäre klasse, wenn mir jemand auf die Sprünge helfen könnte.
Der nach den gesuchten Dateien abzufragende Ordner sieht so aus:
Ziel ist aus den einzelnen Dateinamen.d2s eine Liste im Batchfenster zu generieren, in der man den gewinschten Char über eine Ziffer auswählen kann.
Über eine Schleife könnte man an die gewünschten Dateinamen kommen. Die Dateien mit der Endung ".d2s" würden sich für die Suche eignen, weil sie der gemeinsame Nenner sind.
Vielleicht so ungefähr in der Form war mein Gedanke:
(Mein Gedanke für die Schleife.)
Wenn nun beim Durchlaufen der Schleife die Dateinamen ohne Endung abfallen, wie bekommen ich es hin, daraus eine Liste mit Auswahlmöglichkeit anzeigen zu lassen?
Wenn ich es recht verstehe, nimmt nun bei jedem Durchlauf der Schleife %%f den entsprechenden, gekürtzten Dateinamen an. Und dieser müsste dann zur weiteren Verarbeitung einer neuen Variable (CHAR1, CHAR2, CHAR3, CHAR4, CHAR5, usw...) übergeben werden, damit daraus das Auswahlmenü entstehn kann.
An dieser Stelle komme ich einfach nicht weiter. Als weiteres Problem sehe ich dann noch, dass mal nur 2 Dateinamen und damit auch nur 2 dieser ich nenne sie mal Übergabe-Variablen geben kann. Und mal halt 4 oder 6, 7....
Könnte so das Auswahlmenü erzeugt werden?
Wie könnten nun die Schritte davor aussehen? Oder wie könnte man das vielleicht anders oder gescheiter lösen?
Die "Grund"-Batch steht soweit und läuft so wie ich es mir denke. Nur eben eine Batch für jeden einzelnen Dateinamen (Charakter). Und jedes Mal muss eben noch händisch der Dateiname in der Batchdatei angepasst werden. Und das soll halt durch die Menüauswahl weg fallen. Auch den Namen über eine Abfrage einzutippen ist keine wirkliche Lösung, weil einfach ein Tippfehler reicht und schon Läuft die Batch ins Leere und legt keine Sicherung an.
Mit dem Menü hat es weiterhin den Vorteil, dass die Batch allgemeine Gültig erreicht und so einfach auf jedem Rechner und von jedem genutzt werden kann, egal wie die eigenen Dateinamen sind. Bei 5 Rechnern sind es momentan insgesamt knapp 30 Dateien (also Charaktäre, die Dateien mit der "*.d2s" Endung. Für jede müsste ich nun eine eigene Batch anlegen. Das würde dann alles weg fallen und wäre eine saubere Lösung.
Ich hoffe ihr versteht wie ich es mir vorstelle oder was ich meine. Sonst fragt einfach nach.
Bastel da schon ein wenig dran rum, aber so recht gelingt mir nicht der Durchbruch. Vielleicht könnt ihr mich darin unterstützen. Das wäre wirklich klasse!!
Es wäre klasse, wenn mir jemand auf die Sprünge helfen könnte.
Der nach den gesuchten Dateien abzufragende Ordner sieht so aus:
Ziel ist aus den einzelnen Dateinamen.d2s eine Liste im Batchfenster zu generieren, in der man den gewinschten Char über eine Ziffer auswählen kann.
Über eine Schleife könnte man an die gewünschten Dateinamen kommen. Die Dateien mit der Endung ".d2s" würden sich für die Suche eignen, weil sie der gemeinsame Nenner sind.
Vielleicht so ungefähr in der Form war mein Gedanke:
FOR %%f IN ("%DIRDIABLO%\%DATEINAME%.d2s") DO SET "%%~nf"
Wenn nun beim Durchlaufen der Schleife die Dateinamen ohne Endung abfallen, wie bekommen ich es hin, daraus eine Liste mit Auswahlmöglichkeit anzeigen zu lassen?
Wenn ich es recht verstehe, nimmt nun bei jedem Durchlauf der Schleife %%f den entsprechenden, gekürtzten Dateinamen an. Und dieser müsste dann zur weiteren Verarbeitung einer neuen Variable (CHAR1, CHAR2, CHAR3, CHAR4, CHAR5, usw...) übergeben werden, damit daraus das Auswahlmenü entstehn kann.
An dieser Stelle komme ich einfach nicht weiter. Als weiteres Problem sehe ich dann noch, dass mal nur 2 Dateinamen und damit auch nur 2 dieser ich nenne sie mal Übergabe-Variablen geben kann. Und mal halt 4 oder 6, 7....
Könnte so das Auswahlmenü erzeugt werden?
.
..
...
REM #### Auswahlmenü ####
echo Bitte den Character auswaehlen?
echo -------------------------------
echo 1: %CHAR1% REM Andredatus
echo 2: %CHAR2% REM Bones
echo 3: %CHAR3% REM Mazekeen
echo 4: %CHAR4% REM Miracoli
echo -------------------------------
echo.
echo Bitte auswaehlen
REM #### Auswahl als Char-Name speichern ####
SET /p CHARNAME=
REM #### Ordnernamen und Pfade generieren ####
set "ORDNERNAME=%DATUM%-%ZEIT%-%CHARNAME%"
set "COPYPFADLOC=%DIRBACKUPLOC%\%DAT_YY%\%DAT_MM%\%ORDNERNAME%"
cd %DIRDIABLO%
mkdir "%COPYPFADLOC%"
REM #### Charakter in Verzeichnis sichern ####
FOR %%f IN ("%DIRDIABLO%\%CHARNAME%.*") DO COPY "%%f" "%COPYPFADLOC%"
...
..
.
Wie könnten nun die Schritte davor aussehen? Oder wie könnte man das vielleicht anders oder gescheiter lösen?
Die "Grund"-Batch steht soweit und läuft so wie ich es mir denke. Nur eben eine Batch für jeden einzelnen Dateinamen (Charakter). Und jedes Mal muss eben noch händisch der Dateiname in der Batchdatei angepasst werden. Und das soll halt durch die Menüauswahl weg fallen. Auch den Namen über eine Abfrage einzutippen ist keine wirkliche Lösung, weil einfach ein Tippfehler reicht und schon Läuft die Batch ins Leere und legt keine Sicherung an.
Mit dem Menü hat es weiterhin den Vorteil, dass die Batch allgemeine Gültig erreicht und so einfach auf jedem Rechner und von jedem genutzt werden kann, egal wie die eigenen Dateinamen sind. Bei 5 Rechnern sind es momentan insgesamt knapp 30 Dateien (also Charaktäre, die Dateien mit der "*.d2s" Endung. Für jede müsste ich nun eine eigene Batch anlegen. Das würde dann alles weg fallen und wäre eine saubere Lösung.
Ich hoffe ihr versteht wie ich es mir vorstelle oder was ich meine. Sonst fragt einfach nach.
Bastel da schon ein wenig dran rum, aber so recht gelingt mir nicht der Durchbruch. Vielleicht könnt ihr mich darin unterstützen. Das wäre wirklich klasse!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 459157
Url: https://administrator.de/forum/gekuerzte-dateinamen-in-variablen-und-daraus-auswahlmenue-abfrage-erzeugen-459157.html
Ausgedruckt am: 17.04.2025 um 06:04 Uhr
4 Kommentare
Neuester Kommentar
Servus.
z.B. so
Mit der Variable !file%response%! nach der Auswahl und einem hinzugefügten Wildcard .* am Ende kannst du ja dann Robocopy oder das Copy-Tool deiner Wahl füttern.
Ein Glück das ich schon lange über Batch hinaus bin und mich dafür nicht mehr so verbiegen muss ...
. Würde dir heutzutage eine modernere wärmstens Skriptsprache wie z.B. Powershell/Python & Co. ans Herz legen. Irgendwann muss mit diesen alten Kamellen Schluss sein.
Grüße Uwe
z.B. so
@echo off & setlocal ENABLEDELAYEDEXPANSION
set "folder=D:\DeinOrdnerMitDenDateien"
:menu
set cnt=0
echo --------- Auswahlmenue ------------
echo.
for /f "delims=" %%a in ('dir /b /A-D /ON "%folder%\*.d2s"') DO (
set /a cnt +=1
set "file!cnt!=%%~na"
echo !cnt!^) %%~na
echo.
)
set /p response=Bitte Nummer eingeben ^(mit ENTER bestaetigen^):
if "%response%" == "" (cls &goto :menu)
if %response% LEQ 0 (cls &goto :menu)
if %response% GTR !cnt! (cls &goto :menu)
echo.
echo Die Dateien Ihrer Wahl lauten:
echo.
dir /b /a-d "%folder%\!file%response%!.*"
Ein Glück das ich schon lange über Batch hinaus bin und mich dafür nicht mehr so verbiegen muss ...
Grüße Uwe
Hallo Dirk,
Wenn man aber die Powershell einmal verinnerlicht hat stehen einem ganz neue Möglichkeiten offen. Ich persönlich würde mir also unter Windows mal die Powershell oder VBS ansehen. Soll es plattformübergreifender sein ist heute Python für Anfänger aber auch Fortgeschrittene das Mittel der Wahl.
Schau sie dir einfach mal an, da ist jeder einfach unterschiedlich gestrickt.
Du siehst, Powershell arbeitet objektorientiert und es gibt eine ganze Reihe an Abkürzungen mit denen man auch schnell Dinge abkürzen kann.
Weitere Infos bekommst du Schubkarrenweise im Web:
Grüße Uwe
Welche Sprache würdest du deiner Meinung empfehlen, die halt moderner ist, aber vielleicht doch noch viele Ähnlichkeiten mit dieser Batch-Programmierung hat? Also vielleicht für einen Einstieg zu empfehlen ist.
also wenn es die Windows Schiene sein soll dann sind natürlich als erstes mal die Powershell, VBS und JavaScript die ersten Kanidaten die ohne weitere Maßnahmen auf dem OS laufen. Mit Zusatz zum empfehlen ist auch Python, gerade weil es auch auf sämtlichen Plattformen läuft wenn gefordert und von der Syntax her leicht zu erlernen ist. Powershell kann man natürlich in keinster Weise mit Batch vergleichen, da liegen Welten dazwischen und durch den Zugriff auf das .NET-Framework steht einem quasi eine komplette objektorientierte Programmiersprache inkl. Windows Forms und WPF Oberflächen Support offen ohne die elendigen Bugs von Batch. Sogar selbst laufende Anwendungen als EXE kompiliert kannst du damit erstellen.Wenn man aber die Powershell einmal verinnerlicht hat stehen einem ganz neue Möglichkeiten offen. Ich persönlich würde mir also unter Windows mal die Powershell oder VBS ansehen. Soll es plattformübergreifender sein ist heute Python für Anfänger aber auch Fortgeschrittene das Mittel der Wahl.
Schau sie dir einfach mal an, da ist jeder einfach unterschiedlich gestrickt.
Als Übung könnte ich ja dann möglicherweise mal dieses Skript in die für mich neue Sprache bringen... Vielleicht auch einfach um die Unterschiede zu sehen...
Kann ich dir hier gerne direkt auch mal als Alternative aufzeigen (Kommentare inkl.)# Dateien nach Basename gruppieren und in Variable speichern
$filedata = dir 'D:\DeinOrdner' -File | group Basename
# Menü so lange in einer Schleife anzeigen bis der Benutzer einen gültigen Wert eingegeben hat
do{
# Überschrift erzeugen (mit Trick, du siehst du kannst Strings einfach mit einem Integer multiplizieren um sie zu duplizieren;-))
write-host "$('-'*10) Menü $('-'*10)"
# für jeden Eintrag in der Gruppierung gebe einen Menüeintrag aus (%{} ist ein Alias für eine For-Each Schleife)
1..$filedata.Count | %{write-host "`t$_.) $($filedata[$_-1].Name)"}
# Benutzer nach Eintrag fragen
$response = Read-Host "Ihre Auswahl"
}until($response -in 1..$filedata.Count)
# Ausgabe der passenden Dateien:
write-host "Ihre gewählten Dateien lauten:"
$filedata[$response-1].Group.Fullname
Weitere Infos bekommst du Schubkarrenweise im Web:
- https://docs.microsoft.com/en-us/powershell/
- http://www.powershellpraxis.de/index.php/die-drei-wichtigsten-cmdlets
- http://www.msxfaq.de/code/powershell/powershell.htm
- PowerShell for Runaways - Part I
- PowerShell For Runaways - Part II
Grüße Uwe