Question Déplacer des fichiers dans des dossiers du même nom

Plus d'informations
il y a 1 an 6 mois #32745 par ericlm128
J'ai quelques doutes, tu es sur que cela fonctionne bien ainsi pour tout les fichiers ?

J'aurai fait comme ceci si ça peux te servir
$racine = "C:\Users\user\Desktop\Factures"

$files = Get-ChildItem -LiteralPath $racine
foreach ($file in $files)
{
    $name = $file.BaseName.Trim()
    Write-host $name
    if (Test-Path -LiteralPath "${racine}\${name}" -PathType Container)
    {
        Move-item -LiteralPath $file.FullName -Destination "${racine}\${name}\${name}.$($file.Extension)"
    }
    else
    {
        Write-Host 'Move impossible'
    }
}

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 6 mois - il y a 1 an 6 mois #32746 par Cédric
Salut,
merci pour ton code.
Effectivement tu as raison sur tes doutes, j'ai du le modifier un peu.
j'ai tester le tien il est pas mal, mais n'arrange pas les fichiers qui on des espaces.
par expl.:  ficher qui ont des      espaces  partout  .xlsm

malheureusement par manque de temps je n'ai pas publier ma modification ci-dessous.
il ne le fait pas en une fois (je ne sais pas pourquoi) j'ai du répéter le code et ça fonctionne très bien.

$Racine="C:\Users\user\Desktop\Nouveau dossier\"


$Source = Dir "$Racine"

$files=Dir $Racine
foreach ($Files in $Source){
$Nom=($Files[0].baseName)
$Nomok= ($Files[0].baseName).Substring(0,($Files[0].baseName).Length-1)                          #supprime le dernier caratère du nom de fichier (pas physiquement)
$Extension=$Files.extension                                                                      #extension
$Source| rename-item -NewName {$_.name-replace '(^\s+|\s+$)',' ' -replace '\s+',' '}             #supprime les espaces dans les nom de fichiers et dossier
if (Test-Path "$Racine$Nomok") {Move-item  -Path "$Racine$Nom$Extension"  -Des "$Racine$Nomok\" }    #ceux avec espace après le nom
if (Test-Path "$Racine$Nom") {Move-item  -Path "$Racine$Nom$Extension"  -Des "$Racine$Nom\"} #ceux sans espace après le nom
else { 'Dossier introuvable'}
}


$Source = Dir "$Racine"
$files=Dir $Racine
foreach ($Files in $Source){
$Nom=($Files[0].baseName)
$Nomok= ($Files[0].baseName).Substring(0,($Files[0].baseName).Length-1)                          #supprime le dernier caratère du nom de fichier (pas physiquement)
$Extension=$Files.extension                                                                      #extension
$Source| rename-item -NewName {$_.name-replace '(^\s+|\s+$)',' ' -replace '\s+',' '}             #supprime les espaces dans les nom de fichiers et dossier
if (Test-Path "$Racine$Nomok") {Move-item  -Path "$Racine$Nom$Extension"  -Des "$Racine$Nomok\" }    #ceux avec espace après le nom
if (Test-Path "$Racine$Nom") {Move-item  -Path "$Racine$Nom$Extension"  -Des "$Racine$Nom\"} #ceux sans espace après le nom
else{[System.Windows.Forms.MessageBox]::Show("Dossier introuvable"+": "+$Nom, "Information")}
}

 
Dernière édition: il y a 1 an 6 mois par Cédric.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 6 mois - il y a 1 an 6 mois #32747 par ericlm128

mon deuxième soucis;
j'ai des fichiers qui ont un nom mais à la fin ils ont plusieurs espace avant l'extension.
exempl: Jean du jardin   .xlsm , du coup il ne reconnait pas le dossier qui lui n'as pas d'espaces...

Effectivement, j'ai suivi tes indications et traitait les espaces de début et fin

Voici un ajustement
$racine = "C:\Users\user\Desktop\Factures"

$files = Get-ChildItem -LiteralPath $racine
foreach ($file in $files)
{
    $name = ($file.BaseName -replace "\s+", " ").Trim()
    Write-host $name
    if (Test-Path -LiteralPath "${racine}\${name}" -PathType Container)
    {
        Move-item -LiteralPath $file.FullName -Destination "${racine}\${name}\${name}.$($file.Extension)"
    }
    else
    {
        Write-Host 'Move impossible'
    }
}

Ton code ne dois encore pas fonctionner, au moins pour cette raison
$_.name-replace

Maintenant je constate que tu peux aussi avoir des problèmes de nommage dans les dossiers ?

PS : Il semble que tu as dupliquer ton code, c'est normal ?
Dernière édition: il y a 1 an 6 mois par ericlm128.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 1 an 6 mois - il y a 1 an 6 mois #32748 par Cédric
j'étais justement entrain de voir ton code

j'ai repris ton code et;
[code]$racine = "C:\Users\user\Desktop\Nouveau dossier\"

$Source = Dir "$Racine"
$Source| rename-item -NewName {$_.name-replace '(^\s+|\s+$)',' ' -replace '\s+',' '}             #supprime les espaces dans les nom de fichiers et dossier
$files = Get-ChildItem -LiteralPath $racine
foreach ($file in $files)
{
    $name = $file.BaseName.Trim()
    Write-host $name
    if (Test-Path -LiteralPath "${racine}\${name}" -PathType Container)
    {
        Move-item -LiteralPath $file.FullName -Destination "${racine}\${name}\${name}.$($file.Extension)"
    }
    else
    {
    [System.Windows.Forms.MessageBox]::Show("Dossier introuvable"+": "+$name, "Information")
    }
}
[/code]



PS : Il semble que tu as dupliquer ton code, c'est normal ?
-
il ne le fait pas en une fois (je ne sais pas pourquoi) j'ai du répéter le code et ça fonctionne.
- non, aucuns problèmes de nommage dans les dossiers après plusieurs tests.
Dernière édition: il y a 1 an 6 mois par Cédric.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.071 secondes
Propulsé par Kunena