WinFuture-Forum.de: Winrar / Datei per Batch packen ! H I L F E ! - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Software
Seite 1 von 1

Winrar / Datei per Batch packen ! H I L F E !


#1 Mitglied ist offline   Janeman 

geschrieben 27. September 2016 - 08:13

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 ?
0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.902
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

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):

@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

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   Janeman 

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. :-)
0

#4 Mitglied ist offline   Janeman 

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

Dieser Beitrag wurde von Janeman bearbeitet: 27. September 2016 - 11:21

0

#5 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.902
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

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.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#6 Mitglied ist offline   hoschen 

  • Gruppe: aktive Mitglieder
  • Beiträge: 748
  • Beigetreten: 12. Februar 04
  • Reputation: 2

geschrieben 27. September 2016 - 12:32

Beitrag anzeigenZitat (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')
0

#7 Mitglied ist offline   Janeman 

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
0

#8 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.902
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 28. September 2016 - 13:05

Beitrag anzeigenZitat (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')


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

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0