soidberg
Goto Top

Pfade aus einer txt auslesen, bearbeiten und mit rar Befehl übergeben

Hallo liebes Team
hallo liebe User,

ich habe hier eine .txt in der Ordnerpfade stehen.

Ich möchte diese Pfade auslesen und mit einem Befehl an Winrar übergeben:

____
Befehl:

rar a -sfx "%GEPACKTER ORDNER / ORDERNAME%.rar" %AUSGELESENER ORDNERPFAD%
____

Wie Ihr seht werden in dem Befehl bereits 2 Variable benötigt:

%GEPACKTER ORDNER / ORDERNAME%

sowie

%AUSGELESENER ORDNERPFAD%


*Es können in der .txt beliebig viele Ordnerpfade untereinander stehen, das ist immer unterschiedlich!

Wer hätte da für einen Anfänger eventuell eine Lösung oder zumindest eine Idee wie man das anstellen könnte?

Liebe Grüße

Soidberg

Content-ID: 57695

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

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

bastla
bastla 27.04.2007 um 06:38:27 Uhr
Goto Top
Hallo Soidberg!

Kurze Rückfrage: Stehen in der ".txt"-Datei die Einträge für "%GEPACKTER ORDNER / ORDERNAME%.rar" und "%AUSGELESENER ORDNERPFAD%"

  • untereinander oder
  • paarweise in einer Zeile, oder
  • soll "%AUSGELESENER ORDNERPFAD%" erst ermittelt werden?

Vielleicht machen ein paar Zeilen der Textdatei die Sache anschaulicher ...

Grüße
bastla
Soidberg
Soidberg 27.04.2007 um 15:38:49 Uhr
Goto Top
Hy bastla,

schön Dich hier zu lesen. Also in der .txt sind die Pfade untereinander angeordnet:

Beispiel:

c:\Fotos 2006
f:\Fotos Festival 2007\Januar
d:\Fotos Temp

In diesem Bespiel soll die .bat aus den Pfaden folgende .rar´s erzeugen

Fotos 2006.rar
Fotos Festival 2007_Januar.rar
Fotos Temp.rar

Der Ordnername bzw. die Variablen müssten also gebildet werden. Die Variable:

%GEPACKTER ORDNER / ORDERNAME% stellt den späteren Dateinamen dar und %AUSGELESENER ORDNERPFAD% den Pfad an dem das Archiv abgelegt werden soll, in meinem Fall immer in dem Ordner der auch gepackt wurde.

Liebe Grüße

Soidberg
miniversum
miniversum 27.04.2007 um 16:10:55 Uhr
Goto Top
for /F "delims=" %%a in ('dir /b dateimitverzeichnissen.txt') do rar a -sfx "%%a.rar" "%%a"
miniversum
bastla
bastla 27.04.2007 um 16:15:09 Uhr
Goto Top
Hallo Soidberg!

Dann versuch's mal damit:
@echo off & setlocal
set "Liste=D:\Liste mit RAR-Verzeichnissen.txt"  
for /f "usebackq delims=" %%i in ("%Liste%") do call :ProcessDir "%%~i"  
goto :eof
:ProcessDir
set "OPfad=%~1"  
set "OName=%OPfad:~3%"  
set "OName=%OName:\=_%  
echo rar a -sfx "%OName%.rar" "%OPfad%"  
Es wird vorausgesetzt, dass alle in der Liste angegebenen Pfade mit einem Laufwerksbuchstaben beginnen (und somit für die Festlegung des Namens die ersten 3 Stellen davon weggelassen werden können). Das "echo" in der letzten Zeile sorgt dafür, dass zunächst nur eine Anzeige des "rar"-Befehls erfolgt - wenn alles OK ist, das "echo" einfach entfernen.

Nachtrag: Falls sich die Quelldateien noch in den entsprechenden Ordnern befinden, müsste die letzte Zeile so aussehen:
echo rar a -sfx "%OPfad%\%OName%.rar" "%OPfad%"  

Grüße
bastla

[Edit] Alternative Pfadangabe hinzugefügt [/Edit]
Soidberg
Soidberg 27.04.2007 um 16:39:30 Uhr
Goto Top
> for /F "delims=" %%a in
('dir /b
dateimitverzeichnissen.txt') do rar a
-sfx "%%a.rar" "%%a"
miniversum

Hallo,

ist dein Beitrag eine Ergänzung zum Beitrag von Bastla oder eine eigene Lösung?

@bastla

Ich werde es mal ausprobieren und berichten... vielen lieben Dank bis hierhin.

Gruß Soidberg
miniversum
miniversum 27.04.2007 um 17:32:12 Uhr
Goto Top
Sollte ein eigener Beitrag sein.
Ich merk aber grade da sich nen kleine Fehler drin habe. So sollte es richtig sein:
for /F "delims=" %%a in ('dir /b dateimitverzeichnissen.txt') do rar a -sfx "%%~pa.rar" "%%a"

miniversum
Soidberg
Soidberg 27.04.2007 um 18:34:46 Uhr
Goto Top
Hy,

deine Codezeile erstellt ein Archiv in dem die dir.txt enthalten ist. Dazu trägt das Archiv keinen Namen...

Habe ich da etwas beim Kopieren falsch gemacht ? *schmunzel*

@bastla

Dein Ansatz funktioniert soweit wie gedacht, bin aber noch nicht fertig mit testen und werde berichten.

Liebe Grüße

Soidberg
miniversum
miniversum 27.04.2007 um 19:07:13 Uhr
Goto Top
achja ups.. ach was ist den heute losmit mir?
So gehts natürlich viel besser:
for /F "delims=" %%a in ('type dateimitverzeichnissen.txt') do rar a -sfx "%%~pa.rar" "%%a"

tut mir leid bin heute etwas durcheinander.

miniversum
bastla
bastla 27.04.2007 um 19:30:18 Uhr
Goto Top
@miniversum

Mir ging's gestern so ähnlich ...
Ein Oneliner wird hier übrigens eher nicht reichen, wenn Du Dir oben noch einmal die Beispiele ansiehst - es soll nämlich anscheinend aus dem gesamten Pfad ein Dateiname werden, wobei die "\" durch "_" zu ersetzen sind - zumindest habe ich das so interpretiert.

Außerdem wirst Du mit dem "%%~pa" das letzte Unterverzeichnis verlieren (aber dafür eher unerwünschte "\" am Anfang und Ende erhalten), wenn in der Liste nur Verzeichnisse angeführt sind ...

Grüße
bastla
Soidberg
Soidberg 27.04.2007 um 19:35:06 Uhr
Goto Top
So, diese Variante läuft schon ein Tick besser, allerdings...

...werden alle Pfade die in der .txt angegeben sind in ein Archiv gepackt das immernoch keinen Namen trägt ;0)

Momentan wird ein namenloses Archiv mit allen in der .txt angebeben Ordner erstellt. Das Archiv wird auch nicht in den Ursprungsordnern abgelegt.

EDIT ( da überschnitten)

Jo, das mit dem Oneliner (schönes Wort) wird wohl nix. Bastla seine Methode funktioniert soweit auch sehr gut. Ich konnte es aber noch nicht komplett Testen da ich (wie manche von uns) noch auf arbeit bin.

In diesem Sinn bedanke ich mich einfach auch bei Dir für deinen Einsatz, sollte noch etwas sein (Veränderungen, Probleme) werde ich mich hier direkt wieder melden.

So, 15 Min bis Feierabend:

Taskkill "Schicht.exe"
if exist "%CD%\Schicht 2" goto NEXT
move "Tischinhalt" "Schublade1"
shutdown - s -t 03
goto END
:NEXT
del chef
echo Ich kündige!
:END

Oder so ähnlich *lach*


Grüße Soidberg
Biber
Biber 04.05.2007 um 18:46:51 Uhr
Goto Top
Moin Soidberg,

erstmal danke für Deinen Musterbatch... gefällt mir gut face-big-smile

sollte noch etwas sein (Veränderungen, Probleme) werde ich mich hier direkt wieder melden.
Hmm, ist ja anscheinend nicht eingetreten, der Problemfall...
Dann mach ich hier mal dicht.
Sollten doch noch unerwartet etc etc.... dann PN an mich, dann öffne ich den Thread wieder.

Schönes Wochenende
Biber

Nachtrag 6.5.2007: Auf PN-Anforderung von Soidberg wieder geöffnet.
Soidberg
Soidberg 18.05.2007 um 17:24:36 Uhr
Goto Top
@bastla

Jetzt wird es wild. :D

Ist es möglich eine Sicherheitsroutine einzubauen die ein "ddosPacking" (weiß nicht wie man es sonst beschreiben kann) verhindert?

Es dürfen nur Ordner an RAR übergeben werden die in einer Datei namens Dir.cfg aufgelistet sind.

@mom Funktioniert das ganze so:

Der User besucht meinen Heimserver (Winxp) und klickt in das Verzeichnis "Packstation Step 1", daraufhin wird aus der Serverdatei (dir.cfg) mittels einer .bat alle Unterordner der Pfade in der dir.cfg in eine Datei Packbareordner.rtf geschrieben.

Der User löscht mit einem Editor alle Pfade dier nicht mitgepackt werden sollen und schiebt die Datei wieder auf meinen Rechner. Danach klickt er auf den Pluginordner "Packstation Step 2".

Hier kommt deine .bat zum Einsatz und übergibt die Pfade an das Programm WinRAR. Am schluss werden die Archive in einen Downloadordner verschoben.


Mein Problem:

Wenn nun ein User (mal angenommen) einfach nur C:/ in die hochzuladende datei schreibt würde deine .bat Winrar dazu veranlassen meine komplette Platte zu packen. Unangenehm könnte es werden wenn direkt private Verzeichnise (Eigene Bilder etc) angesprochen würden.

Lösungsansatz:

Genial wäre wenn deine .bat prüfen könnte ob die Pfade in der vom User hochgeladenen Datei (Packbareordner.rtf) den Pfaden in der Dir.cfg entsprechen. Beispiel:

Serverrseitige Dir.cfg enthält:

F:\Aktuelle Bilder,Bilder 2007

Pfad, virtueller Name in der Weboberfläche)


Die vom User hochgeladene datei "Packbareordner.rtf" enthält

F:\Aktuelle Bilder\Januar
C:\

Deine .bat soll nun erkennen das "F:\Aktuelle Bilder\Januar" ein Unterordner ist und soll den an Winrar weitergeben, das Verzeichnis c:\ hingegen soll nicht mitgegeben werden weill es auch nicht in der Dir.cfg steht.

Sozusagen ein Sicherheitsabgleich der Pfade in der Dir.cfg und der Packbarenordner.rtf, damit kein User sich mal schnell etwas Packen lässt was über den Server garnicht freigegegen wurde.

Hättest du da eventuell einen Lösungansatz, kreative Gedanken oder so?

Bei Fragen als her damit, ich lasse Dir gerne das Werk zum zerlegen zukommen. Ich wollte Dich eh schon ansprechen ob du nicht mal über den kompletten Code schauen könntest.

Gruß Soidberg
bastla
bastla 18.05.2007 um 20:12:21 Uhr
Goto Top
Hallo Soidberg!

Du könntest folgenden Batch "davorschalten":
@echo off & setlocal
set "cfg=dir.cfg"  
set "Pack=Packbareordner.rtf"  
set "PackTemp=PackTemp.rtf"  
move /y "%Pack%" "%PackTemp%"  
for /f "usebackq delims=" %%i in ("%PackTemp%") do call :ProcessDir "%%i"  
::zum Testen: Anzeige Ergebnisdatei
type "%Pack%"  
goto :eof
:ProcessDir
set ok=
for /f "usebackq delims=," %%v in ("%cfg%") do echo %~1|findstr /i /b "%%v">nul && set ok=True  
if not defined ok goto :eof
echo %~1>>"%Pack%"  
Mit der Verwendung des "move"-Befehles wird gleichzeitig die "Packbareordner.rtf" umbenannt (bleibt als Sicherung bis zur nächsten Ausführung des Batches erhalten) und eine vorhandene alte "PackTemp.rtf" gelöscht.

In die neue "Packbareordner.rtf" werden nur Pfade aufgenommen, deren Beginn mit einem Pfad der "dir.cfg" übereinstimmt (kann daher nur der selbe Pfad oder ein Unterordner sein).

Das type "%Pack%" steht nur zu Testzwecken da, um sofort das Ergebnis angezeigt zu erhalten und wird in der fertigen Version natürlich nicht benötigt.

Grüße
bastla

P.S.: Nicht sehr ausführlich getestet ...

[Edit] Falls dieser Überprüfungs-Batch in die ursprüngliche Fassung integriert werden soll, müsste das Unterprogramm :ProcessDir umbenannt werden, da oben schon die gleiche Sprungmarke verwendet wurde. [/Edit]