Hallo an alle,
ich möchte mir winrar per Batch eine Datei komprimieren. So weit so gut.
Das Problem ist der Archvname..... ich möchte das entstehende Archiv den Namen von der zu archivierenden Datei an nimmt.
Meine Batch sieht derzeit so aus:
"C:\Programm Files\winrar\rar.exe" a c:\test2\test.rar d:\test2\zvb*.bak
Hier ist klar das das Archiv test.rar heißen wird.
Das möchte ich aber so nicht .... er soll mir den Name der "originalen" .bak Datei verwenden.
Der Name der .bak Datei in d:\test2\ ändert sich jeden Tag (ist ein tägliches Backup von eine SQL Datenbank).... ich möchte ein Batch schreiben die das komprimieren die bak Datei automatisch für mich übernimmt. Aber ich möchte das der Name der .bak Datei mit übernommen wird (das was vor dem .bak steht.
Kann mir da jemand helfen ?
Seite 1 von 1
Winrar / Datei per Batch packen ! H I L F E !
Anzeige
#2
geschrieben 27. September 2016 - 08:27
Was soll jetzt wo hin? Dein Befehl schiebt alle Dateien mit dem Muster "zvb,irgendwas,.rar" in das Archiv 'test.rar'. Da gibt es also keine spezielle Datei, deren Name übernommen werden könnte.
Ein Ansatz wäre, das per Script zu basteln. In etwa so (gänzlich ungetestet):
und dann wäre das Script mit mindestens zwei Parametern aufzurufen, nämlich zuerst dem Namen für das Archiv und dann einer Liste von Dateien (oder Dateimasken), die dort reingestopft werden sollen.
Ansonsten müßtest Du irgendwie schauen, daß "die erste passende Datei" als Archivname übernommen wird. Eventuell mit dir und /o:XXX sortieren, damit das in etwa klar wird, *welcher* Dateiname übernommen wird. (Die ursprüngliche Endung bekomst Du mit %%~n vor dem Variablennamen ersetzt, also zB
Ein Ansatz wäre, das per Script zu basteln. In etwa so (gänzlich ungetestet):
@echo off SET _rarname=%~1 SHIFT SET _files=%* FOR %%n in (%_files%) do @( rar a "%_rarname%" -m5 "%%n" )
und dann wäre das Script mit mindestens zwei Parametern aufzurufen, nämlich zuerst dem Namen für das Archiv und dann einer Liste von Dateien (oder Dateimasken), die dort reingestopft werden sollen.
Ansonsten müßtest Du irgendwie schauen, daß "die erste passende Datei" als Archivname übernommen wird. Eventuell mit dir und /o:XXX sortieren, damit das in etwa klar wird, *welcher* Dateiname übernommen wird. (Die ursprüngliche Endung bekomst Du mit %%~n vor dem Variablennamen ersetzt, also zB
for %%N in (*) do @echo %%~nN.rar- ohne geht auch, dann RAR hängt ein '.rar' selber dran; das geht aber bei "Dateiname.abc.xyz" schief. )
Dieser Beitrag wurde von RalphS bearbeitet: 27. September 2016 - 08:29
#3
geschrieben 27. September 2016 - 08:50
HI,
danke schonmal für deine Antwort. Also in dem Ordner d:\test2\ gibt es immer nur eine Datei zvb*.bak ! Das Sternchen hinter dem zvb steht deshalb da weil das Backup vom SQL Server da ein teilweise wirre Zahlenkombi reinschreibt. Deshalb dieses zvb*.bak
vielleicht hilft dir das etwas und kannst mir nochmal unter die Arme greifen. :-)
danke schonmal für deine Antwort. Also in dem Ordner d:\test2\ gibt es immer nur eine Datei zvb*.bak ! Das Sternchen hinter dem zvb steht deshalb da weil das Backup vom SQL Server da ein teilweise wirre Zahlenkombi reinschreibt. Deshalb dieses zvb*.bak
vielleicht hilft dir das etwas und kannst mir nochmal unter die Arme greifen. :-)
#4
geschrieben 27. September 2016 - 10:12
Hi,
also mein Script sieht jetzt so aus
For /F %%i in ('dir /B d:\test2\zvb*.bak') do set Datei=%%~ni
"C:\Program Files\winrar\rar.exe" a d:\test2\%datei% d:\test2\zvb*.bak
und so funktioniert es auch
also mein Script sieht jetzt so aus
For /F %%i in ('dir /B d:\test2\zvb*.bak') do set Datei=%%~ni
"C:\Program Files\winrar\rar.exe" a d:\test2\%datei% d:\test2\zvb*.bak
und so funktioniert es auch
Dieser Beitrag wurde von Janeman bearbeitet: 27. September 2016 - 11:21
#5
geschrieben 27. September 2016 - 11:48
Mit 'm' geht Verschieben.
Ansonsten hast Du so ein bissel das Problem, daß dann unvorhersehbar ältere .bak-Dateien gegriffen werden. Wenn Du also im Verzeichnis
zvb01.bak
zvb02.bak
zvb00.bak
zvb00.rar
hast, dann kann es Dir passieren, daß eben KEIN neues Archiv namens zvb01.rar angelegt wird. In jedem Fall wandern auch alle Dateien namens zvb*.bak da rein (es sei denn natürlich, Du verwendest vollständige Namen ODER verwendest m (statt a) für rar.exe, sodaß die bewußten zvb**-Dateien jetzt im Archiv und *nicht* mehr im Dateisystem herumliegen. So werden dann natürlich neuere (un-archivierte) zvb*-Dateien auch als solche erkannt.
Ansonsten hast Du so ein bissel das Problem, daß dann unvorhersehbar ältere .bak-Dateien gegriffen werden. Wenn Du also im Verzeichnis
zvb01.bak
zvb02.bak
zvb00.bak
zvb00.rar
hast, dann kann es Dir passieren, daß eben KEIN neues Archiv namens zvb01.rar angelegt wird. In jedem Fall wandern auch alle Dateien namens zvb*.bak da rein (es sei denn natürlich, Du verwendest vollständige Namen ODER verwendest m (statt a) für rar.exe, sodaß die bewußten zvb**-Dateien jetzt im Archiv und *nicht* mehr im Dateisystem herumliegen. So werden dann natürlich neuere (un-archivierte) zvb*-Dateien auch als solche erkannt.
#6
geschrieben 27. September 2016 - 12:32
Zitat (Janeman: 27. September 2016 - 10:12)
"C:\Program Files\winrar\rar.exe" a d:\test2\%datei% d:\test2\zvb*.bak
Hier für könnte man auch das machen:
"C:\Program Files\winrar\rar.exe" a d:\test2\%datei% d:\test2\%datei%.bak
Ausserdem ist in %datei% immer die letzte Datei der Auflistung von ('dir /B d:\test2\zvb*.bak')
#7
geschrieben 27. September 2016 - 13:02
Hallo,
wie schon oben geschrieben .... es ist immer nur eine .bak Datei in dem Verzeichnis. Von daher kann mir eigentlich kein Fehler unterlaufen
wie schon oben geschrieben .... es ist immer nur eine .bak Datei in dem Verzeichnis. Von daher kann mir eigentlich kein Fehler unterlaufen
#8
geschrieben 28. September 2016 - 13:05
Zitat (hoschen: 27. September 2016 - 12:32)
Hier für könnte man auch das machen:
"C:\Program Files\winrar\rar.exe" a d:\test2\%datei% d:\test2\%datei%.bak
Ausserdem ist in %datei% immer die letzte Datei der Auflistung von ('dir /B d:\test2\zvb*.bak')
"C:\Program Files\winrar\rar.exe" a d:\test2\%datei% d:\test2\%datei%.bak
Ausserdem ist in %datei% immer die letzte Datei der Auflistung von ('dir /B d:\test2\zvb*.bak')
Nein, leider nicht. Insbesondere: wenn man da so macht, steckt in Datei auch wirklich "D:\Test2\zvb001.bak" drin. Mit dem Ergebnis, daß man hinterher "D:\Test2\zvb001.bak.rar" bekommt. Und als ob das nicht reichen würde, findet man dann da hinten "D:\test2\d:\test2\zvb001.bak.bak". Hier muß man wirklich aufpassen und entsprechend mit %~ und den entsprechenden Schaltern arbeiten (%~n => Basisname, %~x => Erweiterung; %~f => vollständiger (absoluter) Pfad, je nach Bedarf auch kombinierbar). Ein was geht damit aber leider nicht: Platzhalter auflösen. Deswegen die For()-Schleife, damit der Name der existierenden .bak-Datei ermittelt werden kann.
Außerdem braucht man für explizite Variablenvergaben in Schleifen bei Batch die verzögerte Expansion (delayedexpansion). Die muß man entweder global über die Registry oder mit Schalter für cmd oder mit SETLOCAL anschalten und dann mit ! darauf zugreifen (statt den %-Zeichen).
Also sinngemäß:
for %%n in (*.txt) do @( SET dateiname = %%~nn echo Erster Dateiname der Liste (ohne Endung): %dateiname% echo Momentan betracheter Dateiname (ebenso): !dateiname! )
Wenn es nur eine Datei war, dann muß man halt schauen, ob man den Dateinamen so übergeben kann oder nicht und wenn nicht, dann ist der oben ausgelegte Weg schon ein recht passabler; kann aber (wenn es nur eine Datei ist) auf
for %%n in (d:\TEST2\zvb*.bak) do @( ... )
eingekürzt werden und, falls die Bak-Datei dann weg soll, per m ins Archiv verschoben werden.
Caveat, komprimierte Backups sind störanfälliger als unkomprimierte.
Daher, Protip: WinRAR kann auch Recovery-Informationen speichern. Das macht das Archiv größer, aber auch störresistent(er).
Dieser Beitrag wurde von RalphS bearbeitet: 28. September 2016 - 13:09
- ← Kostenlose "PC-Wächter" Software
- Sonstige Software
- Unbekannte Software für Hardware Innereien gesucht ! →
Thema verteilen:
Seite 1 von 1