2017-02-17 12 views
2

親フォルダにカスタムイメージを与えるために、サブフォルダ内の.jpgを参照するdesktop.iniファイルをフォルダ内に作成したいとします。これは、プロセスを手動で実行する(右クリックフォルダー>プロパティ>カスタマイズ> FILEを選択)。カスタムフォルダアイコンのPowerShellでdesktop.iniをWindows 10で動作しない

そうのようなフォルダ構造と仮定:'Directory':手動プロセスの前に

C:\Test 
---> Folder1 
    ---> Fullsize 
    ---> image.jpg 
---> Folder2 
    ---> Fullsize 
    ---> image.jpg 

を、親フォルダ( 'Folder1には')の属性を持っています。

手動処理後、フォルダの属性は'ReadOnly, Directory'です。 「Fullsize」サブフォルダは元の属性が'Directory'のままです。

のDesktop.iniファイルがそうのような内容で作成される:

[ViewState] 
Mode= 
Vid= 
FolderType=Generic 
Logo=C:\Test\Folder1\Fullsize\image.jpg 

はまた、エンコードはUTF-8であり、ファイルのプロパティは、HSA('Hidden, System, Archive')に設定されています。

OKをクリックするとすぐに、フォルダに画像のプレビューが表示されます。別のフォルダのコードと同等にこれを回す

は、我々は持っている:

$folder2 = 'C:\Test\Folder2' 
$folder2Image = "$folder2\Fullsize\image.jpg" 

$ini = @" 
[ViewState] 
Mode= 
Vid= 
FolderType=Generic 
Logo=$Folder2Image 
"@ 

Set-ItemProperty $Folder2 -Name Attributes -Value 'ReadOnly' 

# Out-File creates UTF-8 with BOM so use [System.IO.File] 
[System.IO.File]::WriteAllLines("$Folder2\desktop.ini", $ini) 
$inifile = Get-Item "$Folder2\desktop.ini" 
$inifile.Attributes = 'Archive, System, Hidden' 

をこれにもかかわらず、フォルダ2には、画像のプレビューが表示されません。彼らが同じになるようにそれらを表示し、desktop.iniをファイル|(属性を選択するには、Get-項目$パス)Folder1にとFOLDER2の属性を確認する

Folder view

desktop.iniのエンコードと実際の内容は、画像へのパスを除いて同じです。画像へのパスが正しい。ファイルには、各行の最後にCRLFが含まれています。私はイメージへの道筋が正しいケースであることを保証しています(問題ではない)。

完全に切り詰められています。私が行方不明になっている手動処理が他に何かできますか?

desktop.ini files in Notepad++

Windowsの10:バージョン1607(OSビルド・14986.1001)

+0

注:このコードをコピーしてPowerShellに貼り付けるとCRLFではなく、LFでdesktop.iniを作成します。 – Robin

答えて

1

シェル/ Explorerを通知するためのDesktop.iniが順番にシェルAPIメソッドを使用して更新する必要があります。

function Set-FolderImage($folder, $imagePath) { 
    # make a temporary folder with desktop.ini 
    $tmpDir = (Join-Path $env:TEMP ([IO.Path]::GetRandomFileName())) 
    mkdir $tmpDir -force >$null 
    $tmp = "$tmpDir\desktop.ini" 
    @" 
[ViewState] 
FolderType=Generic 
Logo=$imagePath 
"@ >$tmp 
    (Get-Item -LiteralPath $tmp).Attributes = 'Archive, System, Hidden' 

    # use a Shell method to move that file into the destination 
    $shell = New-Object -com Shell.Application 
    $shell.NameSpace($folder).MoveHere($tmp, 0x0004 + 0x0010 + 0x0400) 

    # FOF_SILENT   0x0004 don't display progress UI 
    # FOF_NOCONFIRMATION 0x0010 don't display confirmation UI, assume "yes" 
    # FOF_NOERRORUI  0x0400 don't put up error UI 

    del -LiteralPath $tmpDir -force 
} 

使用法:

Set-FolderImage 'R:\Temp' 'R:\33983.jpg' 
+0

ありがとうございます。私はあなたの余分なステップを既存の関数にスプ​​ライスしてから、関数自体を実行することに頼っていましたが、それは私のためには機能しません。私はあなたが使用していたフォルダ構造(つまり、空のフォルダで、私の構造ではなく)の外側にあるイメージを指定していました。別のW10マシン(1607 14393.693)で試してみましたが、まだ運がありません!これがW7の下で動作するのは興味深いですが、現時点でテストするマシンはありません。 – Robin

+0

このコードはWindows 10と7で動作します。 – wOxxOm

+0

エクスプローラでアイコン表示モードに切り替えたことを確認してください。IIRCでは、小さな/詳細ビューでカスタム画像を表示しません。 – wOxxOm

関連する問題