Witam
Mam problem z importowaniem zdjęć na komputer z aparatów. Ale od początku.
Pracuje w firmie gdzie do dokumentacji robimy kilka zdjęć aparatem(każdy ma swój) i później zgrywamy to na komputer szefa.
Starsze aparaty były wykrywane przez Windowsa jako aparat i poprostu klikało się prawym przyciskiem myszy na nazwę aparatu w eksploratorze plików i pojawiało się importuj. I komputer sam tworzył podfolderze z datą. Działało to dobrze. Odkąd pojawiły się nowe aparaty w firmie zaczął się problem. Po podpięciu do komputera nie wykrywa ich jako aparat tylko pamięć masową. I można importować jedynie przez aplikację zdjęcia co średnio działa… albo poprostu tworzyć folder z aktualną data i kopiować. Tu jest drugi problem bo aparaty dublują nazwy i już się zdążyło ze ktoś zastąpił zdjęcia o takiej samej nazwie…
Znacie jakiś prosty program który importowałby zdjęcia z karty SD tworząc od razu podfolder z datą?
Jeżeli to nie ten dział to przepraszam.

#programowanie #techpigulka #pracbaza #fotografia
bojowonastawionaowca

@majlu11 dodaj tagi i będzie git ;)

Arlekin

Do katologowania zdjęc - Bulk Rename Utility

ed280d13-c0df-417e-8cac-1708fff84a33
wonsz

@majlu11 sporo urządzeń ma w ustawieniach jak mają być wykrywane - możliwe że nowe aparaty mają domyślnie pamięć masową.

koszotorobur

@majlu11 - można to zrobić skryptem w PowerShellu bo darmowe programy mogą wymagać licencji do użytku komercyjnego - na https://duck.ai możesz za darmo zadawać pytania ChatGPT - możesz je zadawać po polsku - ja zadałem po angielsku - da Ci odpowiedź w każdym języku programowania.


Give me PowerShell script that copies photos to a folder name based on thier Exif date


Certainly! Below is a PowerShell script that copies photos from a specified source directory to a destination directory, organizing them into folders based on their EXIF date. The script uses the System.Drawing namespace to read the EXIF data.


Make sure you have the necessary permissions to read the source files and write to the destination directory.


powershell


Copy Code

# Define source and destination directories

$sourceDir = "C:\Path\To\Source\Photos"

$destinationDir = "C:\Path\To\Destination\Photos"


# Load the System.Drawing assembly

Add-Type -AssemblyName System.Drawing


# Get all image files from the source directory

$images = Get-ChildItem -Path $sourceDir -Include *.jpg, *.jpeg, *.png -Recurse


foreach ($image in $images) {

try {

# Load the image

$img = [System.Drawing.Image]::FromFile($image.FullName)


# Get the EXIF property for DateTaken

$propertyId = 0x0132 # DateTimeOriginal

$propertyItem = $img.GetPropertyItem($propertyId)


# Convert the EXIF date to a readable format

$dateTaken = [System.Text.Encoding]::ASCII.GetString($propertyItem.Value).Trim()

$date = Get-Date $dateTaken


# Create a folder name based on the EXIF date

$folderName = $date.ToString("yyyy-MM-dd")

$targetDir = Join-Path -Path $destinationDir -ChildPath $folderName


# Create the target directory if it doesn't exist

if (-not (Test-Path -Path $targetDir)) {

New-Item -ItemType Directory -Path $targetDir | Out-Null

}


# Copy the image to the target directory

Copy-Item -Path $image.FullName -Destination $targetDir


# Dispose of the image object

$img.Dispose()

} catch {

Write-Host "Error processing file $($image.FullName): $_"

}

}


Write-Host "Photos have been copied and organized by EXIF date."

Instructions:

Replace C:\Path\To\Source\Photos with the path to your source directory containing the photos.

Replace C:\Path\To\Destination\Photos with the path to your destination directory where you want the organized folders to be created.

Save the script as a .ps1 file (e.g., CopyPhotosByExifDate.ps1).

Open PowerShell and run the script.

Note:

This script assumes that the images have the DateTimeOriginal EXIF property. If the property is missing, the script will skip that image.

Ensure that you have the necessary permissions to access the files and directories specified.

wiatraczeg

@majlu11 Sprzedać aparaty, kupić smartfony z jako takim aparatem, nawet używane i wyczyszczone (dla bezpieczeństwa można kupić nowe, ale nie muszą być tap madl). Postawić Nextcloud gdziekolwiek,i nstalacja to klikanie w next next. Zainstalować nextcloud na telefonach i bzikac zdjęcia od razu posortowane datami i lokalizacją. Nie ma opcji żeby coś poszło nie tak.

koszotorobur

@wiatraczeg - szefu firmy może być niekumaty.

Bo jakby był kumaty to już dawno pracownicy wgrywaliby te zdjęcia do chmury a nie zgrywali do niego na komputer

wiatraczeg

@koszotorobur najgorzej hmm, ale w sumie teraz jak myślę, to nawet nie musi być nextcloud tylko zwykła OpenCamera na androida też posortuje zdjęcia jak się ładnie to ustawi i jest po polsku. Hmm... No ale nadal android a nie canon eos 2kD.


Może producent aparatu dostarcza takie oprogramowanie? Nikon swego czasu tak robił. Można było mieć bibliotekę zdjęć z różnych aparatów w "bibliotece" windows.

mehdnpl

@koszotorobur jest bardzo niekumaty, bo pozwalanie pracownikom na podpinanie czegoś po usb jest proszenie się o kłopoty (nawet nie o specjalne działanie ze strony pracowników, tylko nieświadomie mogą czymś zainfekować)

koszotorobur

@mehdnpl - dokładnie - ktoś kumaty nie pozwoliłby podpinać pracownikom nic pod USB do swojego komputera - a jeszcze bardziej kumaty to do żadnego komputera w firmie (z wyjątkiem rzeczy pochodzących z działu IT - bo myszkę na USB zazwyczaj dają z laptopem).

W ogóle zabezpieczanie portów USB to ciekawe temat ale wszystko może być niewystarczające jak ktoś wsadzi USB Killer i usmaży kompa

majlu11

Dziękuję wszystkim za podpowiedzi.


Tak to niestety u nas wygląda. Mała lokalna firma długo działająca na rynku, niestety z IT na bakier.

Spróbuję pierwsze ze skryptem który zaproponował @koszotorobur . Ale pomysł @wiatraczeg jest dobry i spróbuję go przeforsować. Myślę że stare telefony uda się zorganizować albo jakieś niedrogie nowe kupić i postawić nextcloud.

koszotorobur

@majlu11 - super, że wróciłeś z komentarzem kolego bo niestety nie zawsze się to zdarza i czasem czuję, że nasze rady tutaj lądują w pustkę.

A dla wygody i bezpieczeństwa to wgrywanie zdjęć prosto z telefonu do chmury (nawet takiej co się samemu nie hostuje) to najpraktyczniejsze rozwiązanie.

majlu11

@koszotorobur tak mi się wydaje, telefony nie potrzebują kart SIM, wystarczy wi fi na firmie.

Pytanie czy jest opcja żeby codziennie robił się folder z datą, żeby to było przejrzyste.

majlu11

ChatGPT zaproponował taki skrypt, jak będę miał dostęp do apartow to go przetestuję.

Myślicie że wszystko jest tutaj ok czy coś wymaga poprawy?

Jeszcze raz dziękuję za zainstalowanie 😉

# Ustawienia

$destinationPath = "C:\Users\TwojaNazwaUżytkownika\Pictures\ImportowaneZdjęcia" # Ścieżka docelowa


# Znajdź dysk z kartą SD

$sdCard = Get-WmiObject Win32_DiskDrive | Where-Object { $_.MediaType -eq "Removable Media" }


if ($sdCard) {

\# Uzyskaj literę dysku<br />

$sdCardLetter = \(Get\-WmiObject Win32\_LogicalDisk | Where\-Object \{ $\_\.DeviceID \-eq $sdCard\.DeviceID \}\)\.DeviceID<br />

\# Pobierz wszystkie pliki zdjęć z karty SD<br />

$images = Get\-ChildItem \-Path "$sdCardLetter\\\*" \-Include \*\.jpg, \*\.jpeg, \*\.png \-Recurse<br />

foreach \($image in $images\) \{<br />

    \# Odczytaj datę utworzenia zdjęcia<br />

    $creationDate = \(Get\-Item $image\.FullName\)\.CreationTime<br />

    \# Ustal nazwę folderu na podstawie daty<br />

    $dateFolder = $creationDate\.ToString\("yyyy\-MM\-dd"\)<br />

    $finalDestinationPath = Join\-Path \-Path $destinationPath \-ChildPath $dateFolder<br />

    \# Utwórz folder docelowy, jeśli nie istnieje<br />

    if \(\-not \(Test\-Path \-Path $finalDestinationPath\)\) \{<br />

        New\-Item \-ItemType Directory \-Path $finalDestinationPath<br />

    \}<br />

    \# Ustal nową nazwę pliku, aby uniknąć nadpisywania<br />

    $newFileName = "\{0\}\_\{1:yyyy\-MM\-dd\_HH\-mm\-ss\}\{2\}" \-f $image\.BaseName, $creationDate, $image\.Extension<br />

    $newFilePath = Join\-Path \-Path $finalDestinationPath \-ChildPath $newFileName<br />

    \# Skopiuj zdjęcie do odpowiedniego folderu z nową nazwą<br />

    Copy\-Item \-Path $image\.FullName \-Destination $newFilePath \-Force<br />

\}<br />

Write\-Host "Zdjęcia zostały zaimportowane do: $destinationPath"<br />

} else {

Write\-Host "Nie znaleziono karty SD\."<br />

}

koszotorobur

@majlu11 - jak nie przetestujesz to się nie dowiesz

majlu11

Panowie skrypt udało mi sie dostosowac w weekend i spełnia wszystkie moje funkcje. Utworzyłem skrót skryptu i we własciwosciach/element docelowy dodałem powershell -ExecutionPolicy Bypass -File (i tutaj jest sciezka mojego skryptu). Ale skrypt nie uruchamia sie, pojawia sie czarne okno na sekunde i nic. Z pozycji powershell skrypt działa.

Zaznaczałem uduchom jako administrator. Macie może jakiś pomysł?

Zaloguj się aby komentować