İşte ihtiyacınız olanı yapması gereken bir PowerShell betiği yazdım.
Mantığı bu konudan aldım: https://stackoverflow.com/questions/3555799/how-do-i-refresh-a-files-thumbnail-in-windows-explorer ve bunu Windows'ta zamanlanmış bir görev olarak çalıştırabileceğiniz bir komut dosyasına dönüştürdü.
Kullanmak için .net4.0 ve PowerShell 3.0 kurulu olmalıdır, aksi takdirde hatalarınız olur. Bu noktada muhtemelen .net4.0'a sahipsiniz, ancak muhtemelen ihtiyacınız olacak PowerShell 3.0
Aşağıdakileri thumb_generate.ps1 adlı bir dosyaya kaydedin.
param ([string]$path,[string]$ext)
function Refresh-Explorer
{
$code = @'
[System.Runtime.InteropServices.DllImport("Shell32.dll")]
public static extern Int32 SHParseDisplayName([MarshalAs(UnmanagedType.LPWStr)] String pszName, IntPtr pbc, out IntPtr ppidl, UInt32 sfgaoIn, out UInt32 psfgaoOut);
[System.Runtime.InteropServices.DllImport("Shell32.dll")]
private static extern int SHChangeNotify(int eventId, int flags, IntPtr item1, IntPtr item2);
[System.Runtime.InteropServices.DllImport("Shell32.dll")]
private static extern int ILFree(IntPtr pidl);
public static void Refresh(string path) {
uint iAttribute;
IntPtr pidl;
SHParseDisplayName(path, IntPtr.Zero, out pidl, 0, out iAttribute);
SHChangeNotify(0x00002000, 0x1000, IntPtr.Zero, IntPtr.Zero);
ILFree(pidl);
}
'@
Add-Type -MemberDefinition $code -Namespace MyWinAPI -Name Explorer
[MyWinAPI.Explorer]::Refresh($path)
}
cls
if([System.String]::IsNullOrEmpty($path))
{
Write-Host "Path cannot be empty."
Write-Host "Example: .\thumb_generate.ps1 -path ""C:\"" -ext ""jpg"""
return
}
if([System.String]::IsNullOrEmpty($path))
{
Write-Host "Extension cannot be empty."
Write-Host "Example: .\thumb_generate.ps1 -path ""C:\"" -ext ""jpg"""
return
}
$fileExtension = "*." + $ext
Write-Host -ForegroundColor Green "---Thumbnail generation for Windows 7/8---"
Write-Host -ForegroundColor Green "----PowerShell 3.0 & .Net 4.0 required----"
Write-Host "Path: " $path
Write-Host "Extension: " $fileExtension
Write-Host
if (Test-Path $path)
{
Write-Host "Path Exists, begin generation thumbnails"
$images = [System.IO.Directory]::EnumerateFiles($path,$fileExtension,"AllDirectories")
Foreach($image in $images)
{
try
{
$file = New-Object System.IO.FileInfo($image)
Write-Host $file.FullName
$fStream = $file.Open([System.IO.FileMode]::Open,[System.IO.FileAccess]::Read,[System.IO.FileShare]::None)
$firstbyte = New-Object Byte[] 1
$result = $fStream.Read($firstbyte,0,1)
}
catch
{
Write-Host -ForegroundColor Red "An error occured on file: " + $file.FullName
}
$fStream.Close();
}
Refresh-Explorer
}
else
{
"Path Doesn't Exist, Exiting..."
}
Ardından PowerShell komut satırından aşağıdaki parametrelerle yürütün:
.\thumb_generate.ps1 -path "C:\PathToImages\" -ext "jpg"
Gerçekte, herhangi bir dosya uzantısı çalışmalıdır. Tüm dizinleri tekrarlayarak aşağı bakacak. Tek dezavantajı bir seferde yalnızca bir dosya türüdür, ancak yalnızca farklı bir dosya uzantısı kullanan birden fazla iş çalıştırılabilir. Temel olarak, komut dosyası her dosyayı açar ve yalnızca thumbs.db dosyasını güncellemeye zorlamak için yeterli olan ilk baytı okur.
Düzenle Komut dosyasını yukarıda da yayınlanan kabuk güncelleme bölümünü içerecek şekilde değiştirdim. Benim sistemimde çalışıyor gibi gözüküyor, ancak test edilecek binlerce imge yok. Bu, dosyanın ilk birkaç baytının her ikisinin de okumasını ve ardından küçük resimlerin yenilenmesini zorlar.