driver78
Goto Top

Dateien Kopieren, mit gleichem Namen aber anderer Endung?

Aufgrund meiner noch zu geringen Kenntnisse was den for befehl anbelangt, benötige ich eure Hilfe.

Guten Morgen,

ich sitze mal wieder an einer Herausforderung, die selber nicht bewerkstellig bekomme.
Kurze Vorgeschichte, für ein besseres Verständniss was ich machen möchte und wo ich eure Hilfe benötige.....

Ich habe mir eine Batch geschrieben die folgende Dinge erledigt:

1. sie lädt mir von dem GameServer die Screenshots runter und legt sie in einem Ordner ab. (PNG Dateien)
2. die Runtergeladenen Bilder werden in einen anderen Ordner verschoben und von png -> ppm umgewandelt
3. damit diese dann aussortiert werden (verdächtige screens in den Ordner Verdächtig)

Nun zu meiner eigentlichen Frage, die Verdächtigen Dateien heißen durchweg alle pb**.ppm. Da diese aber umgewandelt sind, kann ich sie zwar sehen und auch Bewerten, doch ich benötige eigentlich die Orginal PNG Dateien!
Das heißt ich suche die möglichkeit sagen zu können, Kopiere mir alle Dateiennamen die in dem Ordner Verdächtig liegen, aber nicht die sondern diese mit der Endung PNG die in dem anderen Ordner liegen!

Da ich nun nicht weiß ob ich mich sauber genug ausgedrückt habe hier kurz noch ein Beispiel:


%cd%\pb000001.png wird umgewandelt in %cd%\pb000001.ppm und wurde als Verdächtig eingestufft und die *.ppm in den Ordner Verdächtig verschoben (das er die ppm in den Ordner einfügt kann ich nicht beeinflussen)

%cd%\pb000002.png wird umgewandelt in %cd%\pb000002.ppm wurde als Nicht Verdächtig eingestufft

die orginalen png liegt noch in %cd%

nun soll aber, statt die Datei die in dem Ordenre Verdächtig liegt kopieren, die Orginal Dateien aus dem Ordner %cd% in ein anderen Ordner kopieren sprich die Verdächtige %cd%\pb000001.png nach zum Beispiel %cd%\PNG.

Nun denn, vielen Dank für eure Geduld...... face-smile

Content-ID: 158022

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

Ausgedruckt am: 24.11.2024 um 19:11 Uhr

H41mSh1C0R
H41mSh1C0R 05.01.2011 um 07:11:50 Uhr
Goto Top
Nichts für ungut, aber die SUFU scheinste ja nicht benutzt zu haben.

Tutorial zur FOR-Schleife

Davon mal abgesehen das dieser Link auch auf der Startseite(rechte Seite) zu sehen ist.

VG
Driver78
Driver78 05.01.2011 um 07:24:40 Uhr
Goto Top
Das ist so nicht ganz Richtig!

Ich kenne den Befehl, doch mir fehlt das Verstädniss den Befehl so einzusetzen das ich meine Frage damit beantworten könnte! Und Wissen fällt hat bekanntlich nicht vom Himmel.....
Und solange ich keinen Aha Effekt erlebe, das ich verstehe wie der Befehl funktioniert, werde ich auf das Wissen von anderen zurückgreifen müssen. Sorry
H41mSh1C0R
H41mSh1C0R 05.01.2011 um 08:15:36 Uhr
Goto Top
Wenn ich dich richtig verstanden habe in deinem Ausgangspost:

Du wandelst Bilder von png in ppm(was ist das für ein Format?).

Unter Schritt 3 schreibst du das diese aussortiert werden. Sortierst du diese aus? Wenn ja zeige doch ein Schnipsel deiner Batch, wäre hilfreich.

Nun willst du nicht die ppm am Ende verschieben sondern die png? Hast du die png denn überhaupt noch, wenn du oben schreibst du wandelst die von png nach ppm??
Driver78
Driver78 05.01.2011 um 08:30:49 Uhr
Goto Top
Hallo,

Portable Pixmap (PPM, Portable PixMap) ist ein Dateiformat zur Speicherung von Bilddaten im RGB-Farbraum. Es handelt sich hier um eine sogenannte Rastergrafik, die mit einer Farbtiefe von 24 Bit 16,7 Mio. Farben (binär) abgespeichert werden kann (im ASCII-Modus sind auch mehr Farben möglich).

Das PPM-Format wurde in den achtziger Jahren von Sun Microsystems definiert. Es kommt in zwei Varianten vor, ASCII und Binär.

Quelle: Wikipedia

Nein, das Aussortieren macht ein externes Programm! Dieses wiederrum verschiebt die PPM Datei in den Ordner Verdächtig, wenn dieses für Verdächtig hällt!
Zwar wird die PNG -> PPM umgewandelt, jedoch ist aber die Orginal PNG noch vorhanden.
BigWim
BigWim 05.01.2011 um 09:10:54 Uhr
Goto Top
Moin,

Ich kenne den Befehl, doch mir fehlt das Verstädniss den Befehl so einzusetzen das ich meine Frage damit beantworten könnte
Kenn ich. Dann ein kleines Beispiel.

@echo off & Setlocal

Set sDateiname=
for /f "tokens=1,2 delims=." %%a in ('dir c:\temp\*.* /b') do call :machwas %%a %%b  
if not defined sDateiname echo *** keine Datei gefunden ***
goto :eof

:Machwas
Set sDateiname=%1
Set sDateiendung=%2
echo %time%  Datei = %sDateiname% - %sDateiendung%

Markus
H41mSh1C0R
H41mSh1C0R 05.01.2011 um 09:30:14 Uhr
Goto Top
Schön jetzt gibts zwar nen schnipsel Batch, aber ob es dadurch das Aha Erlebnis gibt?

Kurze Erläuterung des Schnipsels. Berichtigt wenn ich was falsch schreibe. ^^

/f -> wird benötigt für delims
tokens -> definiert was von interesse ist
delims -> ist das Trennzeichen
dir c:\temp\*.* /b -> gibt das Verzeichnis an das durchsucht wird /b -> einfache Darstellung, ohne Kopfdaten und Zusammenfassung

was verbirgt sich nun hinter %%a und %%b ? -> Token 1 und Token 2

Unter Machwas: muss dann das rein was Driver78 machen will, also das kopieren der richtigen Datei.

Also könnte er statt *.* seinen Verdächtig Ordner nach *.ppm durchsuchen und mit dem Namen dann seine PNG ins %cd%\PNG kopieren.

VG
bastla
bastla 05.01.2011 um 09:51:24 Uhr
Goto Top
@H41mSh1C0R
Berichtigt wenn ich was falsch schreibe. ^^
Falsch zwar nicht, aber in
%cd%\PNG
ist "%cd%\" schlicht überflüssig ...
@BigWim
Die Aufteilung eines Dateinamens in Namen und Typ nach Deiner Methode setzt aber voraus, dass es im eigentlichen Namensteil keinen Punkt geben darf (und hinsichtlich der Variablenübergabe an das Unterprogramm auch kein Leerzeichen) - daher wäre die Schreibweise
for %%a in (c:\temp\*.ppm) do call :machwas "%%~na" %%~xa
sicherer (mehr dazu am Ende der Hilfe mit "for /?") ...
Gerade in diesem Fall hier (wo nur der gesamte Name der Datei ohne weitere Bearbeitung benötigt wird) würde ich übrigens auf das Unterprogramm verzichten und (für die ursprüngliche Problemstellung) etwa folgende ungetestete Zeile verwenden:
for %%a in (verdaechtig\*.ppm) do move "%%~na.png" PNG\ 2>nul
Wie oben schon angeführt, ist die Verwendung von %cd% unnötig, da ja defaultmäßig das aktuelle Verzeichnis verwendet wird.

Soferne der Batch mehrmals ausgeführt wird, gibt es vermutlich viele zugehörige ".png"-Dateien nicht mehr, da sie bereits vorher verschoben wurden - daher wird mit "2>nul" die daraus resultierende Fehlermeldung einfach unterdrückt. Sauberer wäre natürlich die Schreibweise
for %%a in (verdaechtig\*.ppm) do if exist "%%~na.png" move "%%~na.png" PNG\
Grüße
bastla
Driver78
Driver78 05.01.2011 um 13:08:04 Uhr
Goto Top
So,

Verstehen tue ich zur Zeit nur die Hälfte........(wenn das mal hingeht)

Also der Dateiname bleibt immer gleich, lediglich die Nummerierung ändert sich in dem Bereich: pb000001 - pb005000

Und die Batch Bearbeitet im Moment halt in der Reihenfolge:

1. Screenshots runterladen vom Server
2. Screenshots die kleiner sind wie 8000Bytes löschen
3. Umwandeln in PPM, damit dann
4. das Programm die Bilder aussortieren kann, die Bilder liegen im Hauptordner nun als PNG und PPM vor
5. JETZT sollte er halt aufgrund der aussortierten Bilder, die gleichen Dateinamen halt als PNG in einen anderen Ordner Verschieben
5. Zur Zeit verschiebe ich nur mit Move /y *.pmg [Zielort] (da ich aber die PNG weiterverarbeiten möchte, würde ich gerne die Verschieben)
6. löschen der übrigen Bilder

Was ich nun genau nicht verstehe ist wie ich an einen for Befehl dran gehen muss.

%%a <-- Was will ich damit sagen?

in (verdaechtig\*.ppm) <-- im Ordner verdächtig

do move <-- Verschiebe

"%%~na.png" PNG\ <-- ???
bastla
bastla 05.01.2011 um 13:15:05 Uhr
Goto Top
Hallo Driver78!

Frage bitte nochmals, wenn Du das von H41mSh1C0R oben verlinkte Tutorial bzw zumindest die Ausgabe von "for /?" gelesen hast ...

Grüße
bastla
Biber
Biber 05.01.2011 um 13:28:59 Uhr
Goto Top
Moin Driver78,

Zitat von @bastla:
Frage bitte nochmals, wenn Du das von H41mSh1C0R oben verlinkte Tutorial
bzw zumindest die Ausgabe von "for /?" gelesen hast ...
...und zur Klarstellung: das "wenn ..du gelesen hast" in bastlas Empfehlung ist gemeint als "nachdem du", nicht etwa als "falls du..". face-wink

Grüße
Biber
Driver78
Driver78 05.01.2011 um 13:50:13 Uhr
Goto Top
^^

Ich habe mir das Tutorial Ausgedruckt und werde mir es zu gemüte führen.............melde mich dann später nochmal!


So, nach einwenig reinlesen hat es nun funktioniert!

Bastla, hast natürlich recht gehabt mit Deiner Zeile:

for %%a in (verdaechtig\*.ppm) do if exist "%%~na.png" move "%%~na.png" PNG\  


mein Fehler beim Probieren war halt das ich es Direkt in die Kommandozeile eingefügt habe und es nicht als Batch ausgeführt habe! Darauf hin bekam ich natürlich folgende Fehlermeldung angezeigt:

"%%a" kann syntaktisch an dieser Stelle nicht verarbeitet werden.


nachdem ich es dann mit nur Prozent Zeichen eingefügt habe konnte ich es testen und in der Batch gehören natürlich zwei %%!