2016-01-20 7 views
0

Я пытался написать сценарий PowerShell для переименования файлов в каталоге в свойство «.LastWriteTime» этого файла.заявление для сравнения имени файла с измененной датой файла

Первоначально я хотел извлечь дату EXIF ​​«Дата взятия» и использовать ее, но я просто пытаюсь сначала выполнить оставшуюся часть процесса автоматизации. Кроме того, не все снимки имеют данные EXIF, поэтому использование .LastWriteTime - это лучшая вещь.

$pictures = Get-ChildItem -path $picsdir\* -Include "*.jpg" | Sort {$_.LastWriteTime} 
foreach ($picture in $pictures) 
{ 
    $newfile = $picture.LastWriteTime | Get-Date -Format "yyyyMMdd-hhmmss" 

    If ($picture.FullName -eq! "$picture.DirectoryName\$newfile.jpg" -And! (Test-Path -Path "$newfile.jpg")) 
    { 
     Rename-Item $picture.FullName -NewName $newfile$format 
    } 
} 

Проблемы я думаю, что я не могу показаться, чтобы правильно сравнить в If заявления, разница между существующим файлом и текущим файлом. Я делаю это для дальнейшего создания логики для изображений, имеющих одну и ту же дату.

Я думаю, где я пытаюсь построить путь к новому файлу, используя $ picture.DirectoryName текущего файла.

Надеясь, что кто-то может помочь.

ответ

1

Оператор «не равен» в PowerShell: -ne (не -eq!).

Вам не нужно сравнивать FullName недвижимость, вы можете использовать свойство BaseName вместо (имя файла без расширения):

if($picture.BaseName -ne $newfile) 
{ 
    #Picture does not follow datetime naming 
} 

другая половина вашей, если заявление также не будет, так как это проверит файл "$newfile.jpg" в текущем каталоге, а не в каталоге, в котором изображение существует. Вы можете построить полный путь с Join-Path:

Test-Path -Path (Join-Path $picture.Directory.FullName -ChildPath "$newfile.jpg") 

Ending с чем-то вроде:

foreach ($picture in $pictures) 
{ 
    $newName = $picture.LastWriteTime | Get-Date -Format "yyyyMMdd-hhmmss" 
    $newFilePath = Join-Path $picture.Directory.FullName "$newName.jpg" 

    if ($picture.BaseName -ne $newName -and -not(Test-Path -Path $newFilePath)) 
    { 
     Rename-Item $picture.FullName -NewName "$newName.jpg" 
    } 
} 
+0

Спасибо это очень полезно. – Kareem