Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MYSQL-Backup Programm erweitern

Frage Entwicklung Batch & Shell

Mitglied: zyK-one

zyK-one (Level 1) - Jetzt verbinden

09.05.2011, aktualisiert 15:47 Uhr, 3366 Aufrufe, 19 Kommentare

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

01.
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
Mitglied: Skyemugen
09.05.2011 um 09:51 Uhr
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é
Bitte warten ..
Mitglied: zyK-one
09.05.2011 um 10:16 Uhr
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
Bitte warten ..
Mitglied: Skyemugen
09.05.2011 um 10:54 Uhr
Aloha,

verstehe - nun dann auf die Schnelle eventuell so:
01.
@echo off & setlocal 
02.
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 
03.
echo Bitte geben Sie die Zahl der gewuenschten Datei ein: 
04.
set /p "Auswahl=" 
05.
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" 
06.
pause 
07.
goto :eof
greetz André
Bitte warten ..
Mitglied: zyK-one
09.05.2011 um 11:06 Uhr
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:

01.
@echo off & setlocal 
02.
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  
03.
echo Bitte geben Sie die Zahl der gewuenschten Datei ein:  
04.
set /p "Auswahl="  
05.
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"  
06.
 
07.
Pause 
08.
 
09.
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.


01.
@echo off & setlocal  
02.
 
03.
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  
04.
 
05.
echo Bitte geben Sie die Zahl der gewuenschten Datei ein:  
06.
set /p "Auswahl="  
07.
 
08.
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"  
09.
 
10.
pause  
11.
goto :eof

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

Vielen vielen Dank André
Bitte warten ..
Mitglied: Skyemugen
09.05.2011 um 11:11 Uhr
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ö? (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
Bitte warten ..
Mitglied: zyK-one
09.05.2011 um 14:06 Uhr
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

01.
@echo off & setlocal   
02.
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   
03.
echo Bitte geben Sie die Zahl der gewuenschten Datei ein:   
04.
set /p "Auswahl="   
05.
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"   
06.
pause   
07.
goto :eof

verändert in:


01.
@echo off & setlocal   
02.
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   
03.
echo Bitte geben Sie die Zahl der gewuenschten Datei ein:   
04.
set /p "Auswahl="   
05.
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"   
06.
pause   
07.
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:

01.
echo off 
02.
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  
03.
set dieZuSuchende=backup*.sql 
04.
If not defined PfadGefunden for /f %%d in ('cscript //nologo %temp%\GetDrives.vbs') do (  
05.
    for /f "tokens=1,3* delims=:" %%i in ('dir "%%d\%dieZuSuchende%" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^"') do echo %%i %%~nxj 
06.
07.
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
Bitte warten ..
Mitglied: Skyemugen
09.05.2011 um 14:21 Uhr
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é
Bitte warten ..
Mitglied: zyK-one
09.05.2011 um 14:38 Uhr
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.... . Ist es denn möglich den vbs schnipsel in batch zu lösen???



Grüße Max
Bitte warten ..
Mitglied: zyK-one
09.05.2011 um 17:39 Uhr
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

01.
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  
02.
set dieZuSuchende=backup*.sql 
03.
If not defined PfadGefunden for /f %%d in ('cscript //nologo %temp%\GetDrives.vbs') do (  
04.
    for /f "tokens=1,3* delims=:" %%i in ('dir "%%d\%dieZuSuchende%" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^"') do echo %%~nxj >>%temp%/cool.txt 
05.
)
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:

01.
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
Bitte warten ..
Mitglied: Skyemugen
09.05.2011 um 18:04 Uhr
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

greetz André
Bitte warten ..
Mitglied: bastla
10.05.2011 um 17:15 Uhr
Hallo zyK-one und willkommen im Forum, hallo Skyemugen!

Etwas reduziert, aber dafür ungetestet :
01.
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  
02.
set dieZuSuchende=backup*.sql 
03.
set Cool=%temp%\cool.txt 
04.
del %Cool% 2>nul 
05.
if not defined PfadGefunden for /f %%d in ('cscript //nologo %temp%\GetDrives.vbs') do (  
06.
    for /f "delims=" %%i in ('dir "%%d\%dieZuSuchende%" /b /s') do >>%Cool% echo %%i 
07.
08.
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:
01.
set /p Auswahl=Bitte geben Sie die Zahl der gewuenschten Datei ein:  
02.
set /a Auswahl-=1 
03.
set "dieGewaehlte=" 
04.
for /f "delims=" %%i in ('more +%Auswahl% %cool%') do if not defined dieGewaehlte set "dieGewaehlte=%%i" 
05.
if defined dieGewaehlte echo Gewaehlt: %dieGewaehlte%
Das ist natürlich die optimistische Variante (mit der Annahme, dass eine vernünftige Eingabe erfolgt ist) ...

Grüße
bastla
Bitte warten ..
Mitglied: zyK-one
10.05.2011 um 17:47 Uhr
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
Bitte warten ..
Mitglied: zyK-one
11.05.2011 um 08:29 Uhr
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

01.
echo off 
02.
del %TEMP%\cool.txt 
03.
del %TEMP%\cool2.txt 
04.
del %TEMP%\pfade.txt 
05.
del %TEMP%\pfade2.txt 
06.
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  
07.
set dieZuSuchende=backup*.sql 
08.
If not defined PfadGefunden for /f %%d in ('cscript //nologo %temp%\GetDrives.vbs') do (  
09.
    for /f "tokens=1,3* delims=:" %%i in ('dir "%%d\%dieZuSuchende%" /b /s ^| findstr /i "\<backup*." ^|findstr /n "^"') do echo %%~nxj >>%temp%/cool.txt 
10.
11.
cls 
12.
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  
13.
set dieZuSuchende=backup*.sql 
14.
If not defined PfadGefunden for /f %%d in ('cscript //nologo %temp%\GetDrives.vbs') do (  
15.
    for /f "tokens=1 delims=" %%i in ('dir "%%d\%dieZuSuchende%" /b /s ^| findstr /i "\<backup*."') do echo %%i >> %TEMP%\pfade.txt 
16.
17.
 
18.
cls 
19.
for /f "tokens=1 delims=" %%j in ('findstr /i /n "\<backup*." "%TEMP%\pfade.txt"')  do echo %%j >> %TEMP%\pfade2.txt 
20.
for /f "tokens=1 delims=" %%j in ('findstr /i /n "\<backup*." "%TEMP%\cool.txt"')  do echo %%j  
21.
for /f "tokens=1 delims=" %%j in ('findstr /i /n "\<backup*." "%TEMP%\cool.txt"')  do echo %%j >> %temp%\cool2.txt 
22.
 
23.
set /p Auswahl=Bitte geben Sie eine Zahl ein: 
24.
for /f "tokens=2,3 delims=:" %%c in ('findstr /b "%Auswahl%:"  "%TEMP%\pfade2.txt"') do set bpfad="%%c:%%d"  
25.
echo %bpfad% 
26.
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
Bitte warten ..
Mitglied: bastla
11.05.2011 um 08:46 Uhr
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 ) ...

Grüße
bastla
Bitte warten ..
Mitglied: zyK-one
11.05.2011 um 09:41 Uhr
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
Bitte warten ..
Mitglied: bastla
11.05.2011 um 10:32 Uhr
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

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:
01.
:Loop 
02.
set "Auswahl=" 
03.
set /p Auswahl=Bitte geben Sie eine Zahl zwischen 1 und %Anzahl% ein (0=Abbruch):  
04.
if not defined Auswahl goto :Loop 
05.
set Zahl=true 
06.
for /f "delims=0123456789" %%i in ("%Auswahl%") do set "Zahl=" 
07.
if not defined Zahl echo Keine Zahl eingegeben! & goto :Loop 
08.
if %Auswahl%==0 goto :eof 
09.
if %Auswahl% gtr %Anzahl% echo Zu hohe Zahl eingegeben! & goto :Loop
Grüße
bastla
Bitte warten ..
Mitglied: zyK-one
11.05.2011 um 11:50 Uhr
Einwandfrei Super! Vielen Dank Bastla.

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

Grüße Max
Bitte warten ..
Mitglied: bastla
11.05.2011 um 11:54 Uhr
Hallo zyK-one!
Kann ich mich nochmal melden falls ich nochmal hängen bleiben sollte?
Wieso denn nicht?

Grüße
bastla
Bitte warten ..
Mitglied: Skyemugen
11.05.2011 um 12:19 Uhr
[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é
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Windows Server
Backup-Programm mit SFTP Funktion gesucht (4)

Frage von hijacker99 zum Thema Windows Server ...

Backup
gelöst Backup unter WIN 10: Programm für automatisierte Datensicherung (5)

Frage von akelus zum Thema Backup ...

Hyper-V
Altaro VM Backup auf RDX

Frage von smeclnt zum Thema Hyper-V ...

Windows Server
gelöst BackupExec 2016 Fehler beim Backup von Windows 2016 (1)

Frage von Looser27 zum Thema Windows Server ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (18)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...