
99806
09.05.2011, aktualisiert um 15:47:15 Uhr
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
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 165877
Url: https://administrator.de/forum/mysql-backup-programm-erweitern-165877.html
Ausgedruckt am: 22.04.2025 um 04:04 Uhr
19 Kommentare
Neuester Kommentar
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
wirksam.
Das mit deinem
greetz André
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
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é
Aloha,
verstehe - nun dann auf die Schnelle eventuell so:
greetz André
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é
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
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
greetz André
P.S.:
edit: edit edit edit ... ach die Edith ist heute ja so viel am Laufen
ä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ö?
@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
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
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é
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é
Hallo zyK-one und willkommen im Forum, hallo Skyemugen!
Etwas reduziert, aber dafür ungetestet
:
Der Code für das Heraussuchen des Pfades der gewählten Datei könnte dann etwa so aussehen:
Das ist natürlich die optimistische Variante (mit der Annahme, dass eine vernünftige Eingabe erfolgt ist) ... 
Grüße
bastla
Etwas reduziert, aber dafür ungetestet
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
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%
Grüße
bastla
Hallo zyK-one!
Anmerkungen:
Wenn Du per
Anstelle von
Um einen Pfad ohne Dateityp (
) ...
Grüße
bastla
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
Hallo zyK-one!

Du könntest es aber (ungetestet) etwa so versuchen:
Zuerst in meinem Ansatz die letzte Zeile auf
ändern, um die höchste Zeilennummer zu ermitteln, und dann:
Grüße
bastla
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"
: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
bastla