2016-08-07 27 views
1

Ich habe einen Stapel voller Bilder und Videos auf meinem Samsung Handy. Ich kopierte diese Bilder auf einen USB-Stick und dann auf meinen PC.Powershell - Datei umbenennen mit Attribut "Datum genommen"

Ich möchte Powershell verwenden, um diese Dateien basierend auf ihrem Date Taken-Attribut umzubenennen.

Format erforderlich = yyyy-MM-dd HH.mm.ss ddd

Ich habe ein Powershell-Skript wurde (siehe unten), die dieses wunderschön macht mit dem Änderungsdatum Attribut, aber die Kopie oben irgendwie verändert das Änderungsdatum Wert auf mich (WTH!), also kann ich das jetzt nicht benutzen (da es nicht genau ist).

Get-ChildItem | Rename-Item -NewName {$_.LastWriteTime.ToString("yyyy-MM-dd HH.mm.ss ddd") + ($_.Extension)} 

Zusammenfassend - gibt es eine Möglichkeit, den Dateinamen basierend auf dem Attribut Date Taken file zu ändern? Vorschläge, die ich online gesehen habe, erfordern die Verwendung von .NET System.Drawing.dll und verschachtelten Codes (ich bin mir sicher, dass es funktioniert, aber verdammt hässlich).

GG

+0

Haben Sie diese ausgecheckt [Funktion] (https://gallery.technet.microsoft.com/scriptcenter/Rename-picture-files-with-97738191) in Microsoft veröffentlicht Skript Center? Sieht aus, als ob es das tut, was du brauchst. –

+0

Wenn Sie 'System.Drawing' nicht verwenden möchten, um das' DateTaken' Attribut zu extrahieren, wie wäre es dann mit der 'CreationTime' Eigenschaft der Dateien? –

Antwort

0

I 'geklebt' zusammen ein paar anderen Antworten ein Bulk-Skript zu machen. Kredit an diese, aber Chrome abgestürzt und ich habe diese anderen Webseiten auf Stack verloren. Dies funktioniert nur mit Fotodateien und wird alle Dateien in das Format YYYYMMDD_HHMMSS.jpg umbenennen.

Hier ist sie:

$nocomment = [reflection.assembly]::LoadWithPartialName("System.Drawing") 
get-childitem *.jpg | foreach { 
    $pic = New-Object System.Drawing.Bitmap($_.Name) 
    $bitearr = $pic.GetPropertyItem(36867).Value 
    $string = [System.Text.Encoding]::ASCII.GetString($bitearr) 
    $date = [datetime]::ParseExact($string,"yyyy:MM:dd HH:mm:ss`0",$Null) 
    [string] $newfilename = get-date $date -format yyyyMd_HHmmss 
    $newfilename += ".jpg" 
    $pic.Dispose() 
    rename-item $_ $newfilename -Force 
    $newfilename 
}