Bild mit Powershel kopieren und umbenennen

B

ByeBye 274723

Hallo

Da mir vor Jahren hier schon mal sehr gut geholfen wurde, Bitte ich noch einmal um Eure Hilfe.
Da ich Powershel nicht selber Programmieren kann, Bitte ich um ein fertiges Skript.
Ich habe einen 24/7 PC auf dem alles automatisch abläuft, na ja, zu 99%.
Ich habe eine Web Cam die ein Bild im Format 20220323.jpg erzeugt, das kann ich auch nicht ändern.
Das Datum ändert sich natürlich jeden Tag.
Jetzt möcht ich,
1 Bild verkleinert und in den Ordner Bild in 770x433 2022-03-23.jpg
1 Bild verkleinert und in den Ordner cam in 120x68 2022-03-23.jpg
Es geht um ein Bild pro Tag und zur Zeit mache ich das ein mal die Woche per Hand,
ändere die Größe und den Namen, aber ich hätte das gerne Automatisch jeden Tag.

mfg
Michael
 
Keine Ahnung von Powershell, aber zum konvertieren kann man ffmpeg nutzen

Als Batch mal zusammengeklopft
Bash:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
Set SourceFiles=.\Original\
Set BildFiles=.\Bild\
If Not Exist %BildFiles%NUL mkDir %BildFiles%
Set CamFiles=.\Cam\
If Not Exist %CamFiles%NUL mkDir %CamFiles%
Set VAR770=770x433
Set VAR120=120x68
For %%A in (%SourceFiles%*.jpg) Do (
Set InFile=%%~nA
@echo !InFile!
Set Extension=%%~xA
@echo !Extension!
Set OutFile=!InFile:~0,4!-!InFile:~4,2!-!InFile:~6,2!
@echo !OutFile!
Set InPath=%SourceFiles%!InFile!!Extension!
@echo !InPath!
Set OutPath770=%BildFiles%!OutFile!!Extension!
@echo !OutPath770!
Set OutPath120=%CamFiles%!OutFile!!Extension!
@echo !OutPath120!
ffmpeg -loglevel quiet -y -i !InPath! -vf scale=%VAR770% !OutPath770!
ffmpeg -loglevel quiet -y -i !InPath! -vf scale=%VAR120% !OutPath120!
)
Als "convert.bat" abspeichern und einen scheduled task einrichten (bzw. Cron-Job unter Linux)
Ich setzte voraus:
1) In irgendeinem Ordner ist folgendes drin:
Bsp. in c:\Temp\Webcam ist enthalten:
a) ein Ordner "Original" --> Das ist der Ordner, wo die WebCam die Bilder speichert
b) ffmpeg.exe ist dort
c) Dieses Batch-File
2) Es werden zwei weitere Ordner erzeugt: "Bild" und "Cam"
 
Hallo
Vielen Dank für deine Mühe, das Funktioniert.
Muss das jetzt mal an die Ortner anpassen.
Noch eine Frage, es kommt ja jeden Tag ein Bild hinzu, werden dann jedes mal alle Bilder Konvertiert auch die schon erstellt sind?
mfg
Michael
 
Ja, durchläuft alles was er in "Original" findet.
Man könnte u.U. nach erfolgreicher konvertierung das Bild von "Original" nach "Erledigt" schieben oder so ähnlich.
Ich geh mal von aus, dass du das Original nicht löschen willst
 
Hallo
ok, das wäre natürlich optimal, z.Z. wird eine Copy auf eine SD Card erstellt.
mfg
Michael
 
Zeilen 8,9,25,26 und 29 neu hinzu
Wird jetzt von "Original" nach "Erledigt" verschoben
Bash:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
Set SourceFiles=.\Original\
Set BildFiles=.\Bild\
If Not Exist %BildFiles%NUL mkDir %BildFiles%
Set CamFiles=.\Cam\
If Not Exist %CamFiles%NUL mkDir %CamFiles%
Set DoneFiles=.\Erledigt\
If Not Exist %DoneFiles%NUL mkDir %DoneFiles%
Set VAR770=770x433
Set VAR120=120x68
For %%A in (%SourceFiles%*.jpg) Do (
Set InFile=%%~nA
@echo !InFile!
Set Extension=%%~xA
@echo !Extension!
Set OutFile=!InFile:~0,4!-!InFile:~4,2!-!InFile:~6,2!
@echo !OutFile!
Set InPath=%SourceFiles%!InFile!!Extension!
@echo !InPath!
Set OutPath770=%BildFiles%!OutFile!!Extension!
@echo !OutPath770!
Set OutPath120=%CamFiles%!OutFile!!Extension!
@echo !OutPath120!
Set DonePath=%DoneFiles%!InFile!!Extension!
@echo !DonePath!
ffmpeg -loglevel quiet -y -i !InPath! -vf scale=%VAR770% !OutPath770!
ffmpeg -loglevel quiet -y -i !InPath! -vf scale=%VAR120% !OutPath120!
move !InPath! !DonePath!
)

EDIT: Ich habe jetzt relative Pfade benutzt.
Du kannst natürlich auch absolute Pfade benutzen, aber dann darauf achten in Anführungszeichen zu setzen falls Leerzeichen drin sind.
Keine Ahnung wie es sich mit UNC-Notation verhält
 
Zuletzt bearbeitet:
Hallo
ok, Danke
kann etwas dauern bis ich es richtig testen kann, Melde mich dann aber
mfg
Michael
 
Falls der Toaster unter Windows 10 läuft: https://www.technipages.com/scheduled-task-windows
in deinem Fall erzeugst du einen Task mit (als Admin ausführen)
Code:
schtasks /create /tn ConvertJPG /tr "c:\temp\WebCam\convert.bat" /sc daily /st 04:00:00
Erzeugt einen task namens "ConvertJPG" (welcher auf die Batch-Datei weist), welcher dann täglich um 04:00h morgens ausgeführt wird
 
ok, Danke
Ich verwende schon seit Jahren das Programm Z-Cron, für meine Zwecke genau richtig.
mfg
Michael
 
Hallo
Habe es mal angepasst, hat so funktioniert wie ich es mir gedacht/gehoft habe.
Kann man den Pfad auch so zu schreiben? c:\Ordner\....\....
Nochmals vielen Dank.
mfg
Michael

Bash:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
Set SourceFiles=.\Original\
Set BildFiles=.\..\html\camarchiv\2022\
If Not Exist %BildFiles%NUL mkDir %BildFiles%
Set CamFiles=.\..\html\camarchiv\2022\cam\
If Not Exist %CamFiles%NUL mkDir %CamFiles%
Set DoneFiles=.\Erledigt\
If Not Exist %DoneFiles%NUL mkDir %DoneFiles%
Set VAR770=770x433
Set VAR120=120x68
For %%A in (%SourceFiles%*.jpg) Do (
Set InFile=%%~nA
@echo !InFile!
Set Extension=%%~xA
@echo !Extension!
Set OutFile=!InFile:~0,4!-!InFile:~4,2!-!InFile:~6,2!
@echo !OutFile!
Set InPath=%SourceFiles%!InFile!!Extension!
@echo !InPath!
Set OutPath770=%BildFiles%!OutFile!!Extension!
@echo !OutPath770!
Set OutPath120=%CamFiles%!OutFile!!Extension!
@echo !OutPath120!
Set DonePath=%DoneFiles%!InFile!!Extension!
@echo !DonePath!
ffmpeg -loglevel quiet -y -i !InPath! -vf scale=%VAR770% !OutPath770!
ffmpeg -loglevel quiet -y -i !InPath! -vf scale=%VAR120% !OutPath120!
move !InPath! !DonePath!
)
 
Zuletzt bearbeitet von einem Moderator:
Zurück