Partage
  • Partager sur Facebook
  • Partager sur Twitter

desktop.ini : [.ShellClassInfo] IconResource=...

Sujet résolu
    8 mai 2019 à 17:40:48

    Bonjour.


    Dans un dossier (nommons-le "0"),
    j'ai un grand nombre de sous-dossiers (nommons-les "001" à "999"),
    contenant eux aussi des sous-dossiers (nommons-les "A" à "Z"),
    contenant eux aussi parfois des sous-dossiers (nommons-les "1" à "9").

    Des icônes sont placées dans les sous-dossiers "A" à "Z", et ont été attribuées à chaque sous-dossier de "0" au fûr-à-mesure de leur création ; des fichiers "desktop.ini" ont donc été créés dans chaque sous-dossier de "0".


    Exemple :

    Sous-dossier "001"
    
    ---- desktop.ini : [.ShellClassInfo] IconResource=D:\0\001\B\Icon.ico,0
    
    ---- Sous-dossier "A"
    
    -------- Icon.ico
    -------- desktop.ini : [.ShellClassInfo] IconResource=D:\0\001\A\Icon.ico,0
    
    -------- Sous-dossier "1"
    ------------ desktop.ini : [.ShellClassInfo] IconResource=D:\0\001\A\Icon.ico,0
    
    -------- Sous-dossier "2"
    ------------ desktop.ini : [.ShellClassInfo] IconResource=D:\0\001\A\Icon.ico,0
    
    ---- Sous-dossier "B"
    
    -------- Icon.ico
    -------- desktop.ini : [.ShellClassInfo] IconResource=D:\0\001\B\Icon.ico,0
    
    Sous-dossier "002"
    
    ---- desktop.ini : [.ShellClassInfo] IconResource=D:\0\002\A\Icon.ico,0
    
    ---- Sous-dossier "A"
    
    -------- Icon.ico
    -------- desktop.ini : [.ShellClassInfo] IconResource=D:\0\002\A\Icon.ico,0
    
    ---- Sous-dossier "C"
    
    -------- Icon.ico
    -------- desktop.ini : [.ShellClassInfo] IconResource=D:\0\002\C\Icon.ico,0
    
    -------- Sous-dossier "1"
    ------------ desktop.ini : [.ShellClassInfo] IconResource=D:\0\002\C\Icon.ico,0
    
    -------- Sous-dossier "2"
    ------------ desktop.ini : [.ShellClassInfo] IconResource=D:\0\002\C\Icon.ico,0
    
    -------- Sous-dossier "3"
    ------------ desktop.ini : [.ShellClassInfo] IconResource=D:\0\002\C\Icon.ico,0



    J'ai dernièrement coupé le dossier "0" de "D:" et l'ai collé/déplacé dans "C:" ;
    puis ai utilisé "Notepad++" pour modifier tous les "desktop.ini" en même temps, en remplaçant "D:\" par "C:\".

    Problème : Même après avoir supprimé le fichier "C:\Users\User_Name\AppData\Local\IconCache.db", nettoyé et redémmaré le système, les icônes de mes sous-dossiers n'ont pas été actualisées ; je me retrouve donc avec l'icône d'un dossier vide sur chacun de mes sous-dossiers...

    Quelqu'un saurait-il me dire comment faire pour que le système actualise les icônes de mes sous-dossiers en fonction de leurs fichiers "desktop.ini", s'il-vous-plaît ?

    PS : Je suis sous "Windows 7 Édition Familiale Premium SP1 x64".

    -
    Edité par TheScar.fr 10 juillet 2019 à 16:13:02

    • Partager sur Facebook
    • Partager sur Twitter

    /?t - "jukebox"

    ...

      10 juillet 2019 à 16:11:34

      Solution pour, à l'avenir, pouvoir déplacer le dossier sans perdre l'attribution des icônes :

      Sous-dossier "001"
      
      ---- desktop.ini : [.ShellClassInfo] IconResource=.\B\Icon.ico,0
      
      ---- Sous-dossier "A"
      
      -------- Icon.ico
      -------- desktop.ini : [.ShellClassInfo] IconResource=.\Icon.ico,0
      
      -------- Sous-dossier "1"
      ------------ desktop.ini : [.ShellClassInfo] IconResource=..\Icon.ico,0
      
      -------- Sous-dossier "2"
      ------------ desktop.ini : [.ShellClassInfo] IconResource=..\Icon.ico,0
      
      ---- Sous-dossier "B"
      
      -------- Icon.ico
      -------- desktop.ini : [.ShellClassInfo] IconResource=.\Icon.ico,0
      
      Sous-dossier "002"
      
      ---- desktop.ini : [.ShellClassInfo] IconResource=.\A\Icon.ico,0
      
      ---- Sous-dossier "A"
      
      -------- Icon.ico
      -------- desktop.ini : [.ShellClassInfo] IconResource=.\Icon.ico,0
      
      ---- Sous-dossier "C"
      
      -------- Icon.ico
      -------- desktop.ini : [.ShellClassInfo] IconResource=.\Icon.ico,0
      
      -------- Sous-dossier "1"
      ------------ desktop.ini : [.ShellClassInfo] IconResource=..\Icon.ico,0
      
      -------- Sous-dossier "2"
      ------------ desktop.ini : [.ShellClassInfo] IconResource=..\Icon.ico,0
      
      -------- Sous-dossier "3"
      ------------ desktop.ini : [.ShellClassInfo] IconResource=..\Icon.ico,0

      C'est bon, j'ai réussi à faire un script PHP pour modifier tous les fichiers "desktop.ini" des sous-dossiers de mon dossier "0".
      J'ai adapté ce script en fonction de l'exemple que je vous ai donné.
      Attention, c'est un script fait à l'arrache en mélangeant deux scripts que j'avais sous la main ; c'est mal fait mais ça fonctionne, en tout cas pour moi :

      <?php
      	session_start();
      	$_SESSION['folders'] = array();
      	
      	echo '<!DOCTYPE html>
      <html>
      	<head>
      		<meta charset="utf-8" />
      		<title>fonction</title>
      	</head>
      	<body>
      		<p>';
      			
      			function fonction($path, $extension)
      			{
      				$files = array();
      				
      				foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
      				{
      					if(pathinfo($file, PATHINFO_EXTENSION) == $extension)
      					$files[] = (string)$file;
      					$pathParts = pathinfo($file);
      					$basename = $pathParts['basename'];
      					
      					if($basename == 'desktop.ini')
      					{
      						$_SESSION['folders'][] = $pathParts['dirname'];
      					}
      				}
      				
      				return $_SESSION['folders'];
      			}
      			
      			fonction('0/', 'ini');
      			
      			foreach($_SESSION['folders'] as $folder)
      			{
      				if(is_dir($folder))
      				{
      					if($read = opendir($folder))
      					{
      						while(false !== ($inifile = readdir($read)))
      						{
      							if($inifile != '.' AND $inifile != '..')
      							{
      								if($inifile == 'desktop.ini')
      								{
      									$fichier = fopen($folder . '\\' . $inifile, 'r+');
      									$ShellClassInfo = fgets($fichier);
      									$IconResource = fgets($fichier);
      									$IconResource = rtrim($IconResource);
      									$tempIconResource = str_replace('\\', '
      ', $IconResource);
      									rewind($fichier);
      									ftruncate($fichier, 0);
      									fwrite($fichier, '[.ShellClassInfo]
      ' . $tempIconResource);
      									rewind($fichier);
      									$ShellClassInfo = fgets($fichier);
      									$IconResource = fgets($fichier);
      									$dossier = fgets($fichier);
      									$sousDossierNiveau1 = fgets($fichier);
      									$sousDossierNiveau1 = rtrim($sousDossierNiveau1);
      									$sousDossierNiveau2 = fgets($fichier);
      									$sousDossierNiveau2 = rtrim($sousDossierNiveau2);
      									$icone = 'Icon.ico,0';
      									
      									if($folder == '0\\' . $sousDossierNiveau1)
      									{
      										$newIconResource = 'IconResource=.\\' . $sousDossierNiveau2 . '\\' . $icone;
      									}
      									elseif($folder == '0\\' . $sousDossierNiveau1 . '\\' . $sousDossierNiveau2)
      									{
      										$newIconResource = 'IconResource=.\\' . $icone;
      									}
      									elseif(($folder == '0\\' . $sousDossierNiveau1 . '\\' . $sousDossierNiveau2 . '\1') or ($folder == '0\\' . $sousDossierNiveau1 . '\\' . $sousDossierNiveau2 . '\2') or ($folder == '0\\' . $sousDossierNiveau1 . '\\' . $sousDossierNiveau2 . '\3') or ($folder == '0\\' . $sousDossierNiveau1 . '\\' . $sousDossierNiveau2 . '\4') or ($folder == '0\\' . $sousDossierNiveau1 . '\\' . $sousDossierNiveau2 . '\5') or ($folder == '0\\' . $sousDossierNiveau1 . '\\' . $sousDossierNiveau2 . '\6') or ($folder == '0\\' . $sousDossierNiveau1 . '\\' . $sousDossierNiveau2 . '\7') or ($folder == '0\\' . $sousDossierNiveau1 . '\\' . $sousDossierNiveau2 . '\8') or ($folder == '0\\' . $sousDossierNiveau1 . '\\' . $sousDossierNiveau2 . '\9'))
      									{
      										$newIconResource = 'IconResource=..\\' . $icone;
      									}
      									else
      									{
      										$newIconResource = 'IconResource=C:\\' . $icone;
      									}
      									
      									rewind($fichier);
      									ftruncate($fichier, 0);
      									fwrite($fichier, '[.ShellClassInfo]
      ' . $newIconResource . '
      [ViewState]
      Mode=
      Vid=
      FolderType=Generic
      ');
      									fclose($fichier);
      								}
      							}
      						}
      						
      						closedir($read);
      					}
      				}
      			}
      			
      			$_SESSION = array();
      			
      			echo '
      			Modification terminée !
      		</p>
      	</body>
      </html>';
      ?>


      Si ça peut servir à certains...

      -
      Edité par TheScar.fr 11 juillet 2019 à 8:15:14

      • Partager sur Facebook
      • Partager sur Twitter

      /?t - "jukebox"

      ...

      desktop.ini : [.ShellClassInfo] IconResource=...

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      • Editeur
      • Markdown