matsch79
Goto Top

Daten kopieren mit Auswahl

Hallo zusammen,
vielleicht kann mir von eich einer helfen.

Ich möchte gerne eine Datenwiederherstellung mittels einer Batch-Datei realisieren. Ich möchte gerne das das Backup Verzeichnis ausgelesen wir, und ich dann auswählen kann welche Datei ich in ein anderes Verzeichnis kopieren möchte.
Leider haben die Backupdateien nicht einen immer festen Namen, sondern werden bei jedem Autobackup die Datei in folgendem Format dargestellt "Dateiname_2009_05_13.txt". Also Dateiname mit angeängtem Datum.
Habe leider keinerlei Ahnung wie ich sowas realisieren kann. Hat evtl. jemand eine solche Datei? Oder kann mir mit Tipps und Rat weiterhelfen.

Vielen Dank schonmal.

Markus

Content-Key: 116015

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

Printed on: April 26, 2024 at 03:04 o'clock

Mitglied: 60730
60730 May 13, 2009 at 17:24:46 (UTC)
Goto Top
Servus und willkommen,

kannst du mal ein Beispiel der "Dateiname_2009_05_13.txt" senden?

bzw: was genau soll denn passieren?

:parameter
set /p "Jahr=Welches Jahr : "  
set /p "Monat=Welcher Monat : "  
set /p "Tag=Welcher Tag : "  

If exist "Dateiname_%Jahr%_%Monat%_%Tag%.txt" goto start  
echo Datei "Dateiname_%Jahr%_%Monat%_%Tag%" nicht gefunden && goto parameter  
:start
Echo Backup von "Dateiname_%Jahr%_%Monat%_%Tag%"  
Type "Dateiname_%Jahr%_%Monat%_%Tag%.txt"  
pause

Wäre ganz sicher mal ein Anfang....
edit - eine Sicherheitsabfrage kann nie schaden face-wink /edit
Gruß
Member: Matsch79
Matsch79 May 13, 2009 at 17:46:37 (UTC)
Goto Top
Der Dateiname steht nur als Beispiel für die hinterlegten Daten. Die haben eigendlich keinen Einfluß auf den Kopiervorgang.
In dem Ordner "Backups" werden einmal pro Tag eine Datensicherung in Form einer Datei abgelegt.

Ich möchte dann im Fall einer Datenwiederherstellung eine Datei aus dem Ordner "Backups" auswählen und dann in das Originalverzeichnis kopieren,
wo es dann die defekte oder missglückte Datei überschreibt. Vorher soll die defekte Datei aber noch in das Verzeichnis "Bad" kopiert werden, als Möglichkeit der Schadensfeststellung, bzw. Grund für den Fehler.

Ich hoffe es war halbwegs verständlich
Mitglied: 77559
77559 May 13, 2009 at 18:32:57 (UTC)
Goto Top
Hallo Matsch79,

ich habe einen einfachen Auswahl-Mechanismus in Batch der auf nummerierten Dateien beruht.

:: Select.cmd :::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off&setlocal
Set Select=dir /B/S/A-D "D:\Test\*.cmd"  
%Select% |find /V /N ""|more  
::
set "Num="&Set "Auswahl="  
set /P Num=Nummer zum Abspielen :
if not defined Num goto :eof
for /f "tokens=1,* delims=" %%A in (  
  '%Select% ^|find /V /N ""^|find "[%Num%]"'  
    ) do set "Auswahl=%%B"  
if not Defined Auswahl Echo Fehler keine Auswahl&Pause&Goto :Eof
Echo Es wurde Nummer %Num% ausgewählt: %Auswahl%
Pause

Die Variable Select ist mit den Suchkriterien zu versehen
die sowohl für die nummerierte Ausgabe als auch für das anschließende Herausfiltern benutzt wird.

Wenn die Liste mehr als einen Bildschirm lang ist,
muss man sich die [Nummer] merken und Abbrechen mit Q oder weiterblättern mit Leertaste.

Eigentlich ein primitiver Mechanismus aber für viele Fälle ausreichend.

Gruß
LotPings
Member: bastla
bastla May 13, 2009, updated at Oct 18, 2012 at 16:38:12 (UTC)
Goto Top
@77559
Etwas in der Art hatten wir auch mal hier versucht ...

Grüße
bastla
Mitglied: 77559
77559 May 13, 2009, updated at Oct 18, 2012 at 16:38:12 (UTC)
Goto Top
Zitat von @bastla:
@77559
Etwas in der Art hatten wir auch mal
hier versucht

Das ist ja im Vergleich eine komfortable Menustruktur,
mein obiger "quick and dirty"-Ansatz diente mir dazu, aus einem ganzen Verzeichnisbaum Video/MP3/was auch immer Dateien auch nach Namensbestandteilen à la (*Hot Chil*) zu finden und den Fundort nicht wieder zu Fuß abtippen zu müssen. Da mein CMD-Fenster meist 132*60 Zeichen groß ist, muss ich auch nicht viel blättern face-wink

Gruß
LotPings
Member: Matsch79
Matsch79 May 13, 2009 at 21:56:33 (UTC)
Goto Top
Hi bastla,

Das sieht ja schon mal genau aus wie das was ich suche. Zumindest vom Menü. Nur leider blicke ich durch den gesammten Code noch nicht durch. Die Batch von dir erwartet ja *.exe Dateien die ausgeführt werden sollen. In welcher Zeile finde ich den die Möglichkeit statt dem Ausführen einer *.exe die gefundene Datei zu kopieren.

Die gefundene Datei soll im darüber liegenden Ordner gespeichert, Attriebut -R gesetzt und umbenannt werden.

Gibt es eigendlich im Netz ein gutes Nachschlage werk, wo man sich so spezielle Dinge noch anlesen kann, wie die Befehle aufgebaut sein müssen usw. Am idealsten wäre ja ein Editor der die Änderungen direkt auf Syntax Fehler und so weiter kontrolliert, und evtl ner Vorschau, wie der Befehl den man gerade eingibt normalerweise weitergehen würde.

Vielen Dank schon mal für deine/eure Hilfe.

Markus
Member: bastla
bastla May 14, 2009 at 06:15:05 (UTC)
Goto Top
Hallo Matsch79!

In Phlegmas letzter Fassung wird in Zeile 112 die gewählte Datei der Variablen %proggy% (der Name sagt mir nicht wirklich zu, aber ich bleibe in der Folge dabei) zugewiesen - ab da kannst Du sie demnach direkt ansprechen ...

Danach könnte es so weiter gehen:
::Datum abschneiden und Zielpfad erstellen
set "Dateipfad=%Zielordner%\%proggy:~,-15%.%Typ%"  
::umbenannte Kopie am Zielort erstellen
copy "%proggy%" "%Dateipfad%"  
::Schreibschutz entfernen
attrib -r "%Dateipfad%"  
wobei %Zielordner% und %Typ% natürlich vorweg festzulegen wären ...

Grüße
bastla
Member: Matsch79
Matsch79 May 14, 2009 at 15:33:49 (UTC)
Goto Top
Ich glaube, ich bin gerade zu blöd dafür.

Habe das jetzt mal mit dem Code ausprobiert.

Habe das wie folgt abgeändert:

112. set "proggy=!prog%ANr%!"
113. ::Datum abschneiden und Zielpfad erstellen
114 set "C:\Test\Demo\=%Backups%\%proggy:~,-15%.%txt%"
115 ::umbenannte Kopie am Zielort erstellen
116 copy "%proggy%" "%C:\Test\Demo\%"
117 ::Schreibschutz entfernen
118 attrib -r "%C:\Test\Demo\%"


Habe alles was danachkam erst mal gelöscht, bzw in einer anderen Datei archiviert.

Beim Ausführen komme ich bis zur Dateiauswahl, sobald ich die Nummer eingetippt habe, und Enter drücke kommt kurz eine Meldung. Leider geht das Fenster zu schnell zu, so das ich keine Chance habe die Fehlermeldung zu lesen.
Ist das oben so richtig zusammengesetzt? Bin ich wenigstens auf dem richtigen Weg. evtl muß ich den Copy befehl noch mit einem -y erweitern, das er die alte Datei dann auch überschreibt.
Mitglied: 77559
77559 May 14, 2009 at 17:04:16 (UTC)
Goto Top
Zitat von @Matsch79:
Leider geht das Fenster zu schnell zu, so das ich keine Chance habe die Fehlermeldung zu lesen.

Dann starte den Batch entweder aus einem offenen CMD Fenster oder füge einen Pause Befehl ein.

Gruß
LotPings
Member: bastla
bastla May 14, 2009 at 17:21:14 (UTC)
Goto Top
Hallo Matsch79!
114 set "C:\Test\Demo\=%Backups%\%proggy:~,-15%.%txt%
Mit %Zielordner% und %Typ% war gemeint, dass Du diese Werte vorweg in Variablen festlegen solltest (am Besten gleich am Anfang, wo man/frau sie leicht finden kann), zB
set "Zielordner=C:\Test\Demo"
set "Typ=txt"
- beim direkten Eintrag sind die %-Zeichen überflüssig. In den Zeilen 116 und 118 soll dann nur mehr die in Zeile 114 erstellte Variable %Zielpfad% verwendet werden.

Ebenfalls am Anfang kannst Du zur Vereinfachung mit
pushd "Backuppfad"
oder, wenn Du den Pfad schon der Variablen %Backups% zugewiesen hast, eben mit
pushd "%Backups%"
gleich in den richtigen Ordner wechseln (und am Ende, der Ordnung halber, per "popd" wieder zurückkehren) - daher:

Füge die beiden "set"-Zeilen und das "pushd" ein und verwende den von mir geposteten Teil unverändert.
evtl muß ich den Copy befehl noch mit einem -y erweitern, das er die alte Datei dann auch überschreibt.
Mit "-y" würdest Du das Überschreiben verhindern; in einem Batch überschreiben "copy" und "move" per Default.

Grüße
bastla
Member: Matsch79
Matsch79 May 14, 2009 at 20:05:37 (UTC)
Goto Top
Vielen Dank, jetzt funktioniert es. wenn man nicht peniebel drauf achtet das nicht irgendwo ein Leerzeichen, oder ein ungedrehter Schrögstrich oder sonst ein Tippfehler drin gelandet ist, dann ist man hoffnungslos verloren.
Bei manchen HTML Editoren zeigt der farblich an, wenn ein syntax Fehler drin ist. Bibts da für Batch Dateien auch so einen Editor. Ich denke mal das das gerade für Anfänger einfacher wäre.

Jetzt noch mal so als hoffendlich letzte "nervende" Frage.

Wie kann ich die Pfadangaben so gestalten, das die Batchdatei erst ausliest, in welchem Verzeichnis die liegt. Ich frage deswegen, weil ich wohl die Anwendung auf einem USB Stick oder einer mobielen Festplatte laufen lassen möchte, und je nachdem wenn dann z.B. ein anderer Laufwerksbuchstaben zugewiesen wird, stimmen ja die eingetragenen Pfade nicht mehr.

Vielen herzlich Dank schonmal von mir.

Markus
Member: bastla
bastla May 14, 2009 at 20:10:33 (UTC)
Goto Top
Hallo Matsch79!

Das Verzeichnis der Batchdatei lässt sich so ermitteln:
set "Pfad=%~dp0"
Näheres dazu in der Hilfe zu "for" (gegen Ende, unter "Ersetzung von Verweisen") ...

Grüße
bastla
Mitglied: 77559
77559 May 14, 2009 at 20:16:56 (UTC)
Goto Top
Zitat von @Matsch79:

Bei manchen HTML Editoren zeigt der farblich an, wenn ein syntax Fehler drin ist. Bibts da für Batch Dateien auch so einen Editor. Ich denke mal das das gerade für Anfänger einfacher wäre.

Schau dir mal Notepad++ an, hat Syntax Highlighting und kann sehr schön zusammengehörige Klammern, Anführungszeichen etc markieren.

Jetzt noch mal so als hoffendlich letzte "nervende" Frage.
Wie kann ich die Pfadangaben so gestalten, das die Batchdatei erst ausliest, in welchem Verzeichnis die liegt. Ich frage deswegen, weil ich wohl die Anwendung auf einem USB Stick oder einer mobielen Festplatte laufen lassen möchte, und je nachdem wenn dann z.B. ein anderer Laufwerksbuchstaben zugewiesen wird, stimmen ja die eingetragenen Pfade nicht mehr.

Die Batch kennt Ihren eigenen Standort mit "%~dp0"

Gruß
LotPings
Member: Matsch79
Matsch79 May 14, 2009 at 20:49:35 (UTC)
Goto Top
Vielen Dank euch allen. endlich komme ich weiter.

Kann ich mit einem geänderten Befehl auch in das darüberliegende Verzeichnis? In dem Dosfenster selber geht das ja mit "cd.."

Denn die Batch Datei liegt in C:\Test\Demo\Backups\ und ich muß eine Datei dann nach C:\Test\Demo\ verschieben.

habe das vor mit dem Move Befehl.

bis jetzt war es move C:\Test\Demo\Backup\Datei.txt C:\Test\Demo davor soll aber die Originaldatei gesichert werden Zu Analysezwecken oder ähnlichen

Sah bis jetzt so aus:

copy C:\Test\Demo\Datei.txt C:\Test\Demo\Bad\Datei_alt.txt
move C:\Test\Demo\Backup\Datei.txt C:\Test\Demo\Datei.txt
Member: bastla
bastla May 14, 2009 at 21:02:55 (UTC)
Goto Top
Hallo Matsch79!

Analog zu "cd":
pushd "%~dp0.."
oder
set "Pfad=%~dp0.."
bzw konkret
copy "%~dp0..\Datei.txt" "%~dp0..\Bad\Datei_alt.txt"
move "%~dp0Datei.txt" %~dp0.."
Grüße
bastla
Member: Matsch79
Matsch79 May 14, 2009 at 21:56:36 (UTC)
Goto Top
So, mit dem Move klapt das.

wollte dann vorher noch die datei zu Analysrzwecken in einen anderen Ordner kopieren

Habe dann geschrieben

set "Basisordner=%~dp0.."
set "Sicherungsordner=%~dp0..\Bad\"
copy Datei.txt "%Basisordner% "%Sicherungsordner%"
move "%~dp0Datei.txt" "%~dp0.."

Wie gesagt die Reihe mit move funktioniert, aber vorher wird der copy Vorgang mit der Meldung Sysntaxfehler Mup die etwas heißen:

copy "%~dp0..Datei.txt" "%Sicherungsordner%"

oder etwa:

copy "%~dp0..Datei.txt" "&~dp0..\Bad\" ????
Member: Matsch79
Matsch79 May 14, 2009 at 22:38:29 (UTC)
Goto Top
Vielen lieben Dank nochmalan alle dir mir geholfen haben und immer geduldig waren.