Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Entwicklung Batch & Shell

Mitglied: Soidberg

Soidberg (Level 1) - Jetzt verbinden

27.04.2007, aktualisiert 18.05.2007, 5277 Aufrufe, 13 Kommentare

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
Mitglied: bastla
27.04.2007 um 06:38 Uhr
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
Bitte warten ..
Mitglied: Soidberg
27.04.2007 um 15:38 Uhr
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
Bitte warten ..
Mitglied: miniversum
27.04.2007 um 16:10 Uhr
for /F "delims=" %%a in ('dir /b dateimitverzeichnissen.txt') do rar a -sfx "%%a.rar" "%%a"
miniversum
Bitte warten ..
Mitglied: bastla
27.04.2007 um 16:15 Uhr
Hallo Soidberg!

Dann versuch's mal damit:
01.
@echo off & setlocal 
02.
set "Liste=D:\Liste mit RAR-Verzeichnissen.txt" 
03.
for /f "usebackq delims=" %%i in ("%Liste%") do call :ProcessDir "%%~i" 
04.
goto :eof 
05.
:ProcessDir 
06.
set "OPfad=%~1" 
07.
set "OName=%OPfad:~3%" 
08.
set "OName=%OName:\=_% 
09.
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:
01.
echo rar a -sfx "%OPfad%\%OName%.rar" "%OPfad%"
Grüße
bastla

[Edit] Alternative Pfadangabe hinzugefügt [/Edit]
Bitte warten ..
Mitglied: Soidberg
27.04.2007 um 16:39 Uhr
> 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
Bitte warten ..
Mitglied: miniversum
27.04.2007 um 17:32 Uhr
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
Bitte warten ..
Mitglied: Soidberg
27.04.2007 um 18:34 Uhr
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
Bitte warten ..
Mitglied: miniversum
27.04.2007 um 19:07 Uhr
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
Bitte warten ..
Mitglied: bastla
27.04.2007 um 19:30 Uhr
@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
Bitte warten ..
Mitglied: Soidberg
27.04.2007 um 19:35 Uhr
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
Bitte warten ..
Mitglied: Biber
04.05.2007 um 18:46 Uhr
Moin Soidberg,

erstmal danke für Deinen Musterbatch... gefällt mir gut

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.
Bitte warten ..
Mitglied: Soidberg
18.05.2007 um 17:24 Uhr
@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
Bitte warten ..
Mitglied: bastla
18.05.2007 um 20:12 Uhr
Hallo Soidberg!

Du könntest folgenden Batch "davorschalten":
01.
@echo off & setlocal 
02.
set "cfg=dir.cfg" 
03.
set "Pack=Packbareordner.rtf" 
04.
set "PackTemp=PackTemp.rtf" 
05.
move /y "%Pack%" "%PackTemp%" 
06.
for /f "usebackq delims=" %%i in ("%PackTemp%") do call :ProcessDir "%%i" 
07.
::zum Testen: Anzeige Ergebnisdatei 
08.
type "%Pack%" 
09.
goto :eof 
10.
:ProcessDir 
11.
set ok= 
12.
for /f "usebackq delims=," %%v in ("%cfg%") do echo %~1|findstr /i /b "%%v">nul && set ok=True 
13.
if not defined ok goto :eof 
14.
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]
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...