Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 获取文件上的datetake属性_Powershell_Duplicates_File Attributes - Fatal编程技术网

Powershell 获取文件上的datetake属性

Powershell 获取文件上的datetake属性,powershell,duplicates,file-attributes,Powershell,Duplicates,File Attributes,我正在尝试编写一个脚本,该脚本将从照片中获取DateTake属性,并在此基础上创建一个文件夹结构,然后将文件移动到此新位置。我在google上找到了我试图使用的脚本,但当我运行它时,它返回: PS C:\Temp>C:\Temp\MovePhoto.ps1 GAC版本位置 ------真实版本4.0.30319 C:\Windows\Microsoft.Net\assembly\GAC\U MSIL\System.Drawing\v4.0\U 4.0.0。。。。 移动项目:进程无法访问该文件,因

我正在尝试编写一个脚本,该脚本将从照片中获取DateTake属性,并在此基础上创建一个文件夹结构,然后将文件移动到此新位置。我在google上找到了我试图使用的脚本,但当我运行它时,它返回:

PS C:\Temp>C:\Temp\MovePhoto.ps1

GAC版本位置

------真实版本4.0.30319 C:\Windows\Microsoft.Net\assembly\GAC\U MSIL\System.Drawing\v4.0\U 4.0.0。。。。 移动项目:进程无法访问该文件,因为它正在被删除 被另一个进程使用。在C:\Temp\MovePhoto.ps1:43 char:5 +移动项目$FileFullName$FileDirFull\$FileBaseNameNU + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:WriteError:C:\NoBackup\TES…RA\IMG_1372.JPG:FileInfo[Move-Item], IOException +FullyQualifiedErrorId:MoveFileInfoItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand

如果我在没有系统绘制线的情况下编写脚本,它会工作。但是我不能得到datetake属性。我只是不知道我错过了什么

这是剧本

[reflection.assembly]::LoadWithPartialName("System.Drawing")

$FileAll = (Get-ChildItem $SourcePath -Recurse | where {!$_.psiscontainer} | Select-Object Name,Fullname,BaseName,Extension,CreationTime,LastWriteTime,Length,@{Name="MD5";Expression={Get-Md5Hash $_.fullname}} | group MD5 | Where {$_.Count -gt 1 } | %{$_.Group} | sort MD5)
foreach ($File in $FileAll) {
    $FileBaseName = $File.BaseName
    $FileExtension = $File.Extension
    $FileFullName = $File.FullName
    $FileBaseNameNu = $FileBaseName + $FileExtension
    $FileName = $File.Name
}

$foo = New-Object -TypeName System.Drawing.Bitmap -ArgumentList $FileFullName
$date = $foo.GetPropertyItem(36867).Value[0..9]
$arYear = [Char]$date[0],[Char]$date[1],[Char]$date[2],[Char]$date[3]
$arMonth = [Char]$date[5],[Char]$date[6]
$arDay = [Char]$date[8],[Char]$date[9]
$strYear = [String]::Join("",$arYear)
$strMonth = [String]::Join("",$arMonth) 
$strDay = [String]::Join("",$arDay)
$DateTaken = $strYear + "-" + $strMonth + "-" + $strDay

$FileLastWriteTime = $File.LastWriteTime
$FileDirYear = $FileLastWriteTime.Year
$FileDirDate = $FileLastWriteTime.ToShortDateString()
$FileDirFull = "$DestinationPath\DUBLETTER\$FileDirYear\$DateTaken" 

# Create destination path
if ((Test-Path $FileDirFull) -eq $false) { 
    New-Item -Path $FileDirFull -ItemType Directory
}                                        

if (Test-Path (Join-Path $FileDirFull $File.Name)) {
    $n = 0
    while ((Test-Path (Join-Path $FileDirFull $FileBaseNameNU)) -eq $true){
        $FileBaseNameNU = $FileBaseName + "-" + ++$n + $FileExtension
    }
}
Move-Item $FileFullName  "$FileDirFull\$FileBaseNameNU"

}

你能试着更换吗

[reflection.assembly]::LoadWithPartialName("System.Drawing")


忘了它吧,您的问题在于无法移动文件C:\NoBackup\TES…RA\IMG_1372.JPG wich,因为它是打开的,似乎可以在$foo var中使用。请先尝试复制它。您可能可以在移动项目$FileFullName$FileDirFull\$FileBaseNameNU之前使用$foo.Dispose

我已经在VBScript中使用GetDetailsOf完成了这项操作。。。看

这可以使用PowerShell完成,请参阅


可能有一种.NET方法可以做到这一点,即:更适合PS。

谢谢您提供的信息,但根据错误堆栈,问题并不存在。@RachelGallen,它不是重复的,问题可能来自一个无法移动的文件。我已经阅读了这篇文章,它不是一个重复的@RachelGallen,因为这部分工作起来就像是在ISE中测试运行脚本锁定文件。我不能复制文件,因为当我在我的照片文件夹中运行时,它将移动40000个文件。$foo.Dispose做什么?我已经试过了,它会产生同样的错误。我不能先复制文件,因为我会在我的照片文件夹上运行它,直到移动大约40000个文件或430GB的数据。我没有足够的可用空间。我不知道脚本中有什么锁定了fileSystem.Drawing.Bitmap对象打开文件并可以锁定它。我们应该把它放出来。你测试过吗?哈!我现在要走了!我把这排错了。是的,现在可以了!谢谢@JPBlanc的帮助
Add-Type -AssemblyName "system.drawing"