99806
Goto Top

MYSQL-Backup Programm erweitern

Hallo liebe Administratoren-Gemeinde,

ich lese seit Monaten hier dieses Forum und bin immer wieder überrascht, wie toll hier den Leuten geholfen wird. Ich habe in der Vergangeneheit durch abändern, hier im Forum geposteter Anworten, es immer wieder geschafft auf meine Lösung zu kommen. Jetzt bin ich jedoch an einer Stelle wo dies glaube ich nicht mehr geht.

Und zwar geht es darum das ich durch Learning - By - Doing und lesen hier im Forum mir ein Sicherungsprogramm gebaut habe, welches MySQL-Sicherungen anlegt,anzeigt,löscht und einspielt.

Ich hatte es in der Vergangenheit so gehandhabt das die Sicherungen in einem bestimmten Ordner (C:\Programme\MySQL\MySQL Server 5.1\Sicherungen) angelegt und auch nur von dort wieder eingespielt werden können.
Die SQL-Dateien tragen einen festen Anfangsnamen und dynamischen Endnamen um Überschreibungen zu verhindern. So werden sie zusammengesetzt: "Backup_%date%_%random%.sql .

Jetzt dachte ich mir das es so umschreiben könnte, dass die Sicherungen von überall auf dem Computer eingespielt werden können.

Bis jetzt bin ich schon soweit gekommen, das ich die Laufwerke C:\ und D:\ durchsuchen kann und er mir auch alles ausgibt was ich gerne hätte.

Der folgende Code

dir C:\backup*.sql;D:\backup*.sql /b /s | findstr /n /i "\<backup*."   


gibt das folgende Ergebnis aus:

1:C:\Programme\MySQL\MySQL Server 5.1\Sicherungen\Backup_09.05.2011_3620.sql
2:C:\Programme\MySQL\MySQL Server 5.1\Sicherungen\Backup_09.05.2011_3620\Backup_09.05.2011_3620.sql
3:C:\RECYCLER\S-1-5-21-473982012-2279356721-1697583375-500\Dc105.2011_1567\Backup_06.05.2011_1567.sql
4:C:\RECYCLER\S-1-5-21-473982012-2279356721-1697583375-500\Dc87.2011_7733\Backup_05.05.2011_7733.sql
5:D:\Backup_07.09.2010.sql
6:D:\Programme\Sicherungen\Backup_06.05.2011_10464.sql
7:D:\Programme\Sicherungen\Backup_06.05.2011_6503.sql
8:D:\Programme\Sicherungen\Backup_06.05.2011_10464\Backup_06.05.2011_10464.sql
9:D:\Programme\Sicherungen\Backup_06.05.2011_6503\Backup_06.05.2011_6503.sql


Das Problem hierbei ist der Schalter /s. Gebe ich ihn hinzu durchsucht er zwar die Unterordner, gbit aber auch den kompletten Pfad mit aus. Das wollte ich aber gerne verhindern. Also praktisch nur den Dateinnamen. Setze ich /s nicht durchsucht er die Unterordner nicht!

Desweiteren habe ich mir schon Gedanken darüber gemacht, wie denn dann der Pfad eingelesen werden soll, wenn eine Zahl durch set /P eingelesen wird.

Hoffe es ist verständlich auf was ich hinaus möchte.

Grüße zyK-one

Content-Key: 165877

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

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

Member: Skyemugen
Skyemugen May 09, 2011 at 07:51:48 (UTC)
Goto Top
Aloha,

erste Nachfrage:

Warum willst du den Pfad nicht? Wie willst du sonst kopieren/backuppen, wenn das „Programm” nicht weiß, wo die Datei liegt?

zweite Nachfrage (unabhängig der ersten):

Dateiname + Endung oder ohne?

Für beides wäre ein Schleifchen à la
for /f "delims=" %%i in ('dir C:\backup*.sql;D:\backup*.sql /b /s ^| findstr /n /i "\<backup*."') do echo %%~nxi
wirksam.

Das mit deinem set /p musst du mir nochmal erläutern, was du jetzt wie dort angeben/einlesen willst (heute ist Montag, da drehen die Zahnräder noch nicht so)

greetz André
Mitglied: 99806
99806 May 09, 2011 at 08:16:41 (UTC)
Goto Top
Hi André, ich glaube ich habe etwas falsch fomuliert, den Pfad ansich möchte ich schon es geht mir nur um die Anzeige im DOS Fenster.

Es soll also wie folgt aussehen:

1:Backup_09.05.2011_3620.sql --> nicht C:\Programme\MySQL\MySQL Server 5.1\Sicherungen\Backup_09.05.2011_3620.sql
2:Backup_09.05.2011_3620.sql --> nicht C:\Programme\MySQL\MySQL Server 5.1\Sicherungen\Backup_09.05.2011_3620\Backup_09.05.2011_3620.sql

Das als Anzeige quasi nur der Dateiname + Endung angezeigt wird und nicht der komplette Pfad.

Dein geposteter Code, führt das auch super aus! ;). Jedoch brauche ich ein Menü mit vorangestellter Nummer zur Auswahl. Damit der Benutzer auswählen kann, welche Sicherung er einspielen möchte.

Hier kommt jetzt das set /p ins Spiel

Mann kann ja mit z.B. mit "set /p i=Geben Sie bitte eine Zahl ein:" einen Menüpunkt aufrufen.

So könnte man dann z.b. wenn man die Zahl 1 eingibt die Datei "Backup_09.05.2011_3620.sql einspielen.

Meine Frage hierzu wäre nun, wie das Progrämmchen nun weis, unter welchen Pfad sich der Dateiname Backup_09.05.2011_3620.sql befindet.

Um ein MySQL Backup einspielen zu können muss ausgehend von dem Pfad "C:\Programme\MySQL\MySQL Server 5.1\bin wie folgt vorgehen:

mysql -u root <datenbank> < <Pfad zur Datei\Dateiname.Dateiendung>.


Hoffe es ist verständlich

Grüße Max
Member: Skyemugen
Skyemugen May 09, 2011 at 08:54:08 (UTC)
Goto Top
Aloha,

verstehe - nun dann auf die Schnelle eventuell so:
@echo off & setlocal
for /f "tokens=1,3* delims=:" %%i in ('dir "C:\backup*.sql";"D:\backup*.sql" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^"') do echo %%i %%~nxj  
echo Bitte geben Sie die Zahl der gewuenschten Datei ein:
set /p "Auswahl="  
for /f "tokens=2,3* delims=:" %%c in ('dir "C:\backup*.sql";"D:\backup*.sql" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^" ^|findstr /b "%Auswahl%:"') do echo mach etwas mit "%%c:%%d"  
pause
goto :eof

greetz André
Mitglied: 99806
99806 May 09, 2011 at 09:06:36 (UTC)
Goto Top
Hi André, habe jetzt deinen geposteten Code genommen.

Ich bekomme dann das folgende raus wenn ich ihn ausführe.


Bitte geben Sie die Zahl der gewuenschten Datei ein:


Wenn ich dann z.B. eine Zahl eingebe (1, oder 2) erscheint nichts mehr. Habe dann mal echo auf on gestellt und bemerkt, dass bei der zweiten for-schleife das echo kein ergebnis liefert.
Was glaube ich logisch ist, da die Liste der for-Schleife nicht angezeigt wird.

Mein Code sieht momentan so aus:

@echo off & setlocal
for /f "tokens=1,3* delims=:" %%i in ('dir "C:\backup*.sql";"D:\backup*.sql" /b /s ^| findstr /i "datei" ^|findstr /n "^"') do echo %%i %%~nxj   
echo Bitte geben Sie die Zahl der gewuenschten Datei ein: 
set /p "Auswahl="   
for /f "tokens=2,3* delims=:" %%c in ('dir "C:\backup*.sql";"D:\backup*.sql" /b /s ^| findstr /i "datei" ^|findstr /n "^" ^|findstr /b "%Auswahl%:"') do echo "%%c:%%d"   

Pause

goto :eof

Das "setlocal" hatte ich anfangs nicht drinn, jedoch habe ich gesehen, als ich hier anworten wollte mit Zitat, dass du setlocal oben drinn hattestes aber im Code-Schnipsel nicht angezeigt wurde.

Wenn ich es weglasse habe ich dasselbe Ergebnis.


EDIT: setlocal ist doch drinn. Habe es nur übersehen gehabt.


EDIT: Kann es sein das du den Code nochmal verändert hast ? Hatte kurzzeitig einen anderen Code ;) ^^. Funktioniert einwandfrei. ;).

Liste wird angezeigt und er hat den korrekten Pfad.

Habe es ncoh ein klein wenig abgeändert, sodass er die ausgewählte Sicherung in eine Variable speichert.


@echo off & setlocal 

for /f "tokens=1,3* delims=:" %%i in ('dir "C:\backup*.sql";"D:\backup*.sql" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^"') do echo %%i %%~nxj   

echo Bitte geben Sie die Zahl der gewuenschten Datei ein: 
set /p "Auswahl="   

for /f "tokens=2,3* delims=:" %%c in ('dir "C:\backup*.sql";"D:\backup*.sql" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^" ^|findstr /b "%Auswahl%:"') do set bpfad="%%c:%%d"   

pause 
goto :eof


Ich muss sagen ich bin abermals begeistert von dieser Seite und ganz besonders von den Leuten hier.

Vielen vielen Dank André
Member: Skyemugen
Skyemugen May 09, 2011 at 09:11:01 (UTC)
Goto Top
Aloha,


ähm ... gucke mal deinen code und meinen an und nehme einen Tipp von mir entgegen: Warte immer 5 Minuten, eh du einen Code kopierst ... working while progress you know du editierst ja auch mehrmals, höhö? face-wink (Darum war das @echo off & setlocal am Anfang noch nicht vorhanden)
Da ich mit anderen Daten getestet habe ja, ich teste vieles lieber erst einmal, habe ich natürlich auch ein anderes Muster genutzt (guck mal findstr an), das ich beim ersten c&p leider vergessen habe zu ändern und danach erst bearbeitet habe (in der Annahme niemand kopiert kurz nach dem Posten bereits das Ergebnis xD)

greetz André

P.S.: setlocal ist nur dazu da, dass die Umgebungsvariable nur für die aktuelle batch konfiguriert wird, beim Schließen der batch erfolgt automatisch endlocal wodurch die Änderungen ungültig gemacht werden und somit nicht allgemeingültig (für Windows) sind.

edit: edit edit edit ... ach die Edith ist heute ja so viel am Laufen face-smile
Mitglied: 99806
99806 May 09, 2011 at 12:06:26 (UTC)
Goto Top
Hi André,

sorry das ich in den gelöst Post reinschreibe, jedoch ist mir im Nachhinein etwas aufgefallen. Ich wollte deswegen jetzt keinen neuen Thread aufmachen, da hierzu gehört.

Ich habe den Code

@echo off & setlocal  
for /f "tokens=1,3* delims=:" %%i in ('dir "C:\backup*.sql";"D:\backup*.sql" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^"') do echo %%i %%~nxj    
echo Bitte geben Sie die Zahl der gewuenschten Datei ein:  
set /p "Auswahl="    
for /f "tokens=2,3* delims=:" %%c in ('dir "C:\backup*.sql";"D:\backup*.sql" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^" ^|findstr /b "%Auswahl%:"') do set bpfad="%%c:%%d"    
pause  
goto :eof


verändert in:


@echo off & setlocal  
for /f "tokens=1,3* delims=:" %%i in ('dir "C:\backup*.sql";"D:\backup*.sql";"E:\backup*.sql";"F:\backup*.sql" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^"') do echo %%i %%~nxj    
echo Bitte geben Sie die Zahl der gewuenschten Datei ein:  
set /p "Auswahl="    
for /f "tokens=2,3* delims=:" %%c in ('dir "C:\backup*.sql";"D:\backup*.sql";"E:\backup*.sql";"F:\backup*.sql" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^" ^|findstr /b "%Auswahl%:"') do set bpfad="%%c:%%d"    
pause  
goto :eof


Jetzt habe ich das Problem, das wenn einer der Laufwerke ein CD/DVD Laufwerk ist eine Fehlermeldung erscheint bezüglich CD/DVD Laufwerk nicht bereit.


Aus einem anderem Thread habe ich was aufgeschnappt, wo auf allen aktiven Laufwerken nach etwas gesucht wird.

Ich habe den Teil mit deinem Teil verknüpft udn habe diesen Schnipsel hergestellt:

echo off
echo For Each D In CreateObject ("scripting.FileSystemObject").Drives:If D.DriveType=2 And D.IsReady Then:WScript.Echo D:End If:Next>%temp%\GetDrives.vbs   
set dieZuSuchende=backup*.sql
If not defined PfadGefunden for /f %%d in ('cscript //nologo %temp%\GetDrives.vbs') do (   
    for /f "tokens=1,3* delims=:" %%i in ('dir "%%d\%dieZuSuchende%" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^"') do echo %%i %%~nxj  
)
Pause


Funktioniert super, bis auf die Nummerierung, Zahlen größer 11 schneidet er ab. Siehe folgendes Beispiel:

1 Backup_09.05.2011_13h27m41s.sql
2 Backup_09.05.2011_13_25_50.sql
3 Backup_09.05.2011_16005.sql
4 Backup_09.05.2011_16606.sql
5 Backup_09.05.2011_2260.sql
6 Backup_09.05.2011_23401.sql
7 Backup_09.05.2011_24339.sql
8 Backup_09.05.2011_2932.sql
9 Backup_09.05.2011_31100.sql
10 Backup_09.05.2011_5280.sql
11 Backup_09.05.2011_3620.sql
1 Backup_07.09.2010.sql
2 Backup_06.05.2011_10464.sql
3 Backup_06.05.2011_6503.sql
4 Backup_06.05.2011_10464.sql
5 Backup_06.05.2011_6503.sql


Ich kann mir absolut nicht erklären wieso. Hättest du eine Idee?


Grüße Max
Member: Skyemugen
Skyemugen May 09, 2011 at 12:21:17 (UTC)
Goto Top
Aloha,

bist du sicher, dass er die abschneidet? Oder fängt er einfach wieder bei 1 an > für das nächste Laufwerk? Immerhin steht im vbs ja for each also würde mir das logisch erscheinen. (wobei vbs jetzt nicht unbedingt mein großer Kenntnisbereich ist ^_^)

Pack doch mal eine 12. Datei zum Verzeichnis/Laufwerk, wo die ersten 11 liegen und gucke doch mal, ob er wirklich bei 11 abschneidet oder wo er wirklich warum neu anfängt zu zählen.

greetz André
Mitglied: 99806
99806 May 09, 2011 at 12:38:21 (UTC)
Goto Top
Zitat von @Skyemugen:
Aloha,

bist du sicher, dass er die abschneidet? Oder fängt er einfach wieder bei 1 an > für das nächste Laufwerk?
Immerhin steht im vbs ja for each also würde mir das logisch erscheinen. (wobei vbs jetzt nicht unbedingt mein
großer Kenntnisbereich ist ^_^)

Pack doch mal eine 12. Datei zum Verzeichnis/Laufwerk, wo die ersten 11 liegen und gucke doch mal, ob er wirklich bei 11
abschneidet oder wo er wirklich warum neu anfängt zu zählen.

greetz André


Du hast Recht. Es ist Laufwerkabhängig. Habe eben 5 Dateien hinzugefügt und siehe da, er hat weiter gezählt.

Mhmm Mist. Ich habe auch nicht viel Ahnung von vbs.... face-sad . Ist es denn möglich den vbs schnipsel in batch zu lösen???


Grüße Max
Mitglied: 99806
99806 May 09, 2011 at 15:39:11 (UTC)
Goto Top
Ich habe mir inzwischen ein paar Gedanken darüber gemacht und bin nun auf einen Lösungsweg gekommen der eigentlich funktionieren sollte. Jedoch habe ich bei diesem Lösungsweg ein ähnliches Problem.

Und zwar lese ich weiterhin mit

echo For Each D In CreateObject ("scripting.FileSystemObject").Drives:If D.DriveType=2 And D.IsReady Then:WScript.Echo D:End If:Next>%temp%\GetDrives.vbs   
set dieZuSuchende=backup*.sql
If not defined PfadGefunden for /f %%d in ('cscript //nologo %temp%\GetDrives.vbs') do (   
    for /f "tokens=1,3* delims=:" %%i in ('dir "%%d\%dieZuSuchende%" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^"') do echo %%~nxj >>%temp%/cool.txt  
)

Speichere Sie jedoch am Ende der "for-Schleife" in die Datei cool.txt ohne laufende Nummern.

Der Inhalt der txt sieht dann so aus:

(Inhalt verkürzt)

Backup_09.05.2011_13h27m41s.sql
Backup_09.05.2011_13_25_50.sql
Backup_09.05.2011_14h33m08s.sql
Backup_09.05.2011_14h33m14s.sql

Jetzt dachte ich mir kann ich doch die Dateien mit einer weiteren "for-Schleife" wieder zurückholen nur diesmal richtig durchnummeriert.

Habe den folgenden Befehl dafür genommen:

for /f "tokens=1 delims=" %%j in ('findstr /i /n "\<backup*." "%TEMP%\cool.txt"')  do echo %%~nxj  

Jetzt bekommen ich das folgende als Ergebnis:

Backup_09.05.2011_13h27m41s.sql
Backup_09.05.2011_13_25_50.sql
Backup_09.05.2011_14h33m08s.sql
Backup_09.05.2011_14h33m14s.sql
Backup_09.05.2011_14h33m16s.sql
Backup_09.05.2011_14h33m19s.sql
Backup_09.05.2011_14h33m22s.sql
Backup_09.05.2011_16005.sql
Backup_09.05.2011_16606.sql
10:Backup_09.05.2011_2260.sql
11:Backup_09.05.2011_23401.sql
12:Backup_09.05.2011_24339.sql
13:Backup_09.05.2011_2932.sql
14:Backup_09.05.2011_31100.sql
15:Backup_09.05.2011_5280.sql
16:Backup_09.05.2011_3620.sql
17:Backup_07.09.2010.sql
18:Backup_06.05.2011_10464.sql
19:Backup_06.05.2011_6503.sql
20:Backup_06.05.2011_10464.sql
21:Backup_06.05.2011_6503.sql


Er fängt jetzt erst bei 10 an und lässt den Rest davor aus. Vielleicht verstehe ich es ja falsch aber eigentlich hat doch die cool.txt jetzt nichts mehr mit den Laufwerken von oben zu tun, weswegen die Zählfolge nicht gestimmt hatte.


Hat der Befehl vielleicht einen Fehler?


Grüße Max
Member: Skyemugen
Skyemugen May 09, 2011 at 16:04:56 (UTC)
Goto Top
Aloha,

ohne dein Treiben in dieser Richtung weiterzutreiben (zu viel Sonne, bin gleich wieder weg) - nur die Frage: Wie willst du jetzt den Pfad wiederbekommen, wenn du nur noch die Dateinamen speicherst und ausliest?

Grüble ruhig noch ein wenig, ich schau eventuell abends wieder rein face-wink

greetz André
Member: bastla
bastla May 10, 2011 at 15:15:13 (UTC)
Goto Top
Hallo zyK-one und willkommen im Forum, hallo Skyemugen!

Etwas reduziert, aber dafür ungetestet face-wink:
echo For Each D In CreateObject ("scripting.FileSystemObject").Drives:If D.DriveType=2 And D.IsReady Then:WScript.Echo D:End If:Next>%temp%\GetDrives.vbs   
set dieZuSuchende=backup*.sql
set Cool=%temp%\cool.txt
del %Cool% 2>nul
if not defined PfadGefunden for /f %%d in ('cscript //nologo %temp%\GetDrives.vbs') do (   
    for /f "delims=" %%i in ('dir "%%d\%dieZuSuchende%" /b /s') do >>%Cool% echo %%i  
)
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" %temp%\cool.txt') do echo %%i %%~nxj  
Der Code für das Heraussuchen des Pfades der gewählten Datei könnte dann etwa so aussehen:
set /p Auswahl=Bitte geben Sie die Zahl der gewuenschten Datei ein: 
set /a Auswahl-=1
set "dieGewaehlte="  
for /f "delims=" %%i in ('more +%Auswahl% %cool%') do if not defined dieGewaehlte set "dieGewaehlte=%%i"  
if defined dieGewaehlte echo Gewaehlt: %dieGewaehlte%
Das ist natürlich die optimistische Variante (mit der Annahme, dass eine vernünftige Eingabe erfolgt ist) ... face-wink

Grüße
bastla
Mitglied: 99806
99806 May 10, 2011 at 15:47:15 (UTC)
Goto Top
Hi Bastla,

vielen Dank für deinen Beitrag. Ich kann es aber leider erst Morgen testen. Habe in der Zwischenzeit auch eine Lösung entworfen. Ich poste morgen meine Variante und gebe Feedback bezüglich des Codes von dir.

Ich wünsche dir noch einen schönen Abend ;).

Grüße Max
Mitglied: 99806
99806 May 11, 2011 at 06:29:06 (UTC)
Goto Top
Hi Bastla,

habe mir deinen Code angeschaut und getestet. Er funktioniert einwandfrei bis auf die Tatsache die du schon angesprochen hast bezüglich der falsch Eingabe.

Hier meine Variante

echo off
del %TEMP%\cool.txt
del %TEMP%\cool2.txt
del %TEMP%\pfade.txt
del %TEMP%\pfade2.txt
echo For Each D In CreateObject ("scripting.FileSystemObject").Drives:If D.DriveType=2 And D.IsReady Then:WScript.Echo D:End If:Next>%temp%\GetDrives.vbs   
set dieZuSuchende=backup*.sql
If not defined PfadGefunden for /f %%d in ('cscript //nologo %temp%\GetDrives.vbs') do (   
    for /f "tokens=1,3* delims=:" %%i in ('dir "%%d\%dieZuSuchende%" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^"') do echo %%~nxj >>%temp%/cool.txt  
)
cls
echo For Each D In CreateObject ("scripting.FileSystemObject").Drives:If D.DriveType=2 And D.IsReady Then:WScript.Echo D:End If:Next>%temp%\GetDrives.vbs   
set dieZuSuchende=backup*.sql
If not defined PfadGefunden for /f %%d in ('cscript //nologo %temp%\GetDrives.vbs') do (   
    for /f "tokens=1 delims=" %%i in ('dir "%%d\%dieZuSuchende%" /b /s ^| findstr /i "\<backup*."') do echo %%i >> %TEMP%\pfade.txt  
)

cls
for /f "tokens=1 delims=" %%j in ('findstr /i /n "\<backup*." "%TEMP%\pfade.txt"')  do echo %%j >> %TEMP%\pfade2.txt  
for /f "tokens=1 delims=" %%j in ('findstr /i /n "\<backup*." "%TEMP%\cool.txt"')  do echo %%j   
for /f "tokens=1 delims=" %%j in ('findstr /i /n "\<backup*." "%TEMP%\cool.txt"')  do echo %%j >> %temp%\cool2.txt  

set /p Auswahl=Bitte geben Sie eine Zahl ein:
for /f "tokens=2,3 delims=:" %%c in ('findstr /b "%Auswahl%:"  "%TEMP%\pfade2.txt"') do set bpfad="%%c:%%d"   
echo %bpfad%
echo %bpfad:~0,-4%"  

Das Problem bei mir war die laufende Nummerierung, wo er nach dem ersten Laufwerk von vorne begonnen hatte zu zählen.

Grüße Max
Member: bastla
bastla May 11, 2011 at 06:46:35 (UTC)
Goto Top
Hallo zyK-one!

Anmerkungen:
Wenn Du per dir /b /s backup*.sql die Suche ohnehin schon auf Dateien (und Ordner, lassen sich mit /a-d ausschließen) mit passenden Namen eingeschränkt hast, brauchst Du eigentlich findstr /i /n "\<backup*." nicht mehr.

Anstelle von for /f "tokens=1,3* delims=:", wodurch das Laufwerk "weggeschnitten" wird, wäre for /f "tokens=1* delims=:" sinnvoller - es wird dann nur am ersten ":" getrennt und der folgende Teil (wegen "*") als Einheit belassen.

for /f "tokens=1 delims=" lässt sich schmerzfrei auf for /f "delims=" reduzierern - wenn Du nicht trennst, musst Du auch die Nummer des gewünschten Teiles angeben.

Um einen Pfad ohne Dateityp (%bfad:~0,-4%) zu erhalten, könntest Du in der Schleife set bpfanoext="%%c:%%~dpnd" (siehe dazu for /f ziemlich gegen Ende) verwenden (woebei c: nicht mehr nötig ist, wenn Du es vorher nicht abschneidest face-wink) ...

Grüße
bastla
Mitglied: 99806
99806 May 11, 2011 at 07:41:33 (UTC)
Goto Top
Hi Bastla,

danke für deine Erklärungen. Das macht Sinn!

Bezüglich der falsch Eingabe. Irre ich mich oder konnte man irgendwie mit set /p die Eingabe steuern? Also das z.B. nur Zahlen erlaubt sind.

Grüße Max
Member: bastla
bastla May 11, 2011 at 08:32:28 (UTC)
Goto Top
Hallo zyK-one!
Irre ich mich oder konnte man irgendwie mit set /p die Eingabe steuern? Also das z.B. nur Zahlen erlaubt sind.
Ersteres face-wink

Du könntest es aber (ungetestet) etwa so versuchen:
Zuerst in meinem Ansatz die letzte Zeile auf
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" %temp%\cool.txt') do echo %%i %%~nxj & set "Anzahl=%%i"
ändern, um die höchste Zeilennummer zu ermitteln, und dann:
:Loop
set "Auswahl="  
set /p Auswahl=Bitte geben Sie eine Zahl zwischen 1 und %Anzahl% ein (0=Abbruch): 
if not defined Auswahl goto :Loop
set Zahl=true
for /f "delims=0123456789" %%i in ("%Auswahl%") do set "Zahl="  
if not defined Zahl echo Keine Zahl eingegeben! & goto :Loop
if %Auswahl%==0 goto :eof
if %Auswahl% gtr %Anzahl% echo Zu hohe Zahl eingegeben! & goto :Loop
Grüße
bastla
Mitglied: 99806
99806 May 11, 2011 at 09:50:41 (UTC)
Goto Top
Einwandfrei Super! Vielen Dank Bastla.

Kann ich mich nochmal melden falls ich nochmal hängen bleiben sollte?

Grüße Max
Member: bastla
bastla May 11, 2011 at 09:54:51 (UTC)
Goto Top
Hallo zyK-one!
Kann ich mich nochmal melden falls ich nochmal hängen bleiben sollte?
Wieso denn nicht? face-smile

Grüße
bastla
Member: Skyemugen
Skyemugen May 11, 2011 at 10:19:17 (UTC)
Goto Top
[OT]also wirklich, bastla: Eine Frage (die nur der TE selbst beanworten kann hm, ob er wohl kann, muss er wohl selber entscheiden btw ..) mit einer Gegenfrage zu beantworten; tze tze tze[/OT]

greetz André