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......
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......
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 158022
Url: https://administrator.de/contentid/158022
Ausgedruckt am: 24.11.2024 um 19:11 Uhr
11 Kommentare
Neuester Kommentar
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
Tutorial zur FOR-Schleife
Davon mal abgesehen das dieser Link auch auf der Startseite(rechte Seite) zu sehen ist.
VG
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??
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??
Moin,
Markus
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
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
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
@H41mSh1C0R
@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
sicherer (mehr dazu am Ende der Hilfe mit "
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:
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 "
Grüße
bastla
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
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
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 Schreibweisefor %%a in (verdaechtig\*.ppm) do if exist "%%~na.png" move "%%~na.png" PNG\
bastla
Moin Driver78,
Grüße
Biber
Zitat von @bastla:
Frage bitte nochmals, wenn Du das von H41mSh1C0R oben verlinkte Tutorial
bzw zumindest die Ausgabe von "
...und zur Klarstellung: das "wenn ..du gelesen hast" in bastlas Empfehlung ist gemeint als "nachdem du", nicht etwa als "falls du..". Frage bitte nochmals, wenn Du das von H41mSh1C0R oben verlinkte Tutorial
bzw zumindest die Ausgabe von "
for /?
" gelesen hast ...Grüße
Biber