1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
Clear-Host
#Ce script ne copie que les fichiers non copiés par le script de copie vers nouvelle arborescence.
#Ce script reconstruit le csv d'origine pour ne garder que que les chemins source et destination sans les doublons
#Il sélectionne les répertoires parent "source" dans le csv, il sarrête à la même occurrence de chemin de "destination du CSV et copie les fichier
#effacement des variables
Remove-Variable * -ErrorAction SilentlyContinue
#effacement des CSV transitoires si presents
$FileName = "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\source.csv"
If (Test-Path $FileName){
Remove-Item $FileName
}
$FileName1 = "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\destination.csv"
If (Test-Path $FileName1){
Remove-Item $FileName1
}
$FileName2 = "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\test01.csv.csv"
If (Test-Path $FileName2){
Remove-Item $FileName2
}
#Import du CSV à traiter
$ImportData ="C:\Users\Documents\scripts\Script_de_copie_depuis_CSV\feuilles_CSV\test_copiefichiers.csv"
import-Csv -Path $ImportData -Delimiter ";" -Encoding Default | ForEach-Object {
$niv = $_.GroupeS
$ninfsource = $_.NinfSource
$dst = $_.destination
#Mise en forme des colonnes à traiter et création d'un CSV transitoire "test01.csv"
import-Csv -Path $ImportData -Delimiter ";" -Encoding Default |Select-Object Source,destination,Groupes |Export-Csv -path "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\test01.csv" -NoTypeInformation -Delimiter ";" -Encoding Default -force
}
#Traitement de la colonne destination pour remonter jusqu'a la même occurance
function FindCommunPath {
param(
[string[]]$items
)
$itemsSplit = For ($i = 0 ; $i -lt $items.count; $i++)
{
,($items[$i].Split([system.io.path]::DirectorySeparatorChar))
}
$commun = ""
For ($i = 0 ; $i -lt $itemsSplit[0].count; $i++)
{
if (@($itemsSplit[1..$itemsSplit.Count] | Where-Object {$_[$i] -ne $itemsSplit[0][$i]}).Count -ne 0)
{
break
}
$commun += $itemsSplit[0][$i] + "\"
}
#création d'un CSV Transitoire non mis en forme "racinedest.csv"
$Commun >>"C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\racinedest.csv"
}
#Sélection du CSV et traitement de la conne "groupe'" pour remonter jusquà la même occurrence
$csv = Import-Csv -Path "C:\Users\Documents\scripts\Script_de_copie_depuis_CSV\feuilles_CSV\test_copiefichiers.csv" -Delimiter ";" -Encoding Default
$csv | Group-Object -Property GROUPES | ForEach-Object {
$dossierCommun = FindCommunPath -items $_.Group.DESTINATION
"$($_.Name) : $dossierCommun"
}
#Traitement de la colonne source pour création d'un CSV transitoire non mis en forme "sour.csv"
$csv1 = Import-Csv -Path "C:\Users\Documents\scripts\Script_de_copie_depuis_CSV\feuilles_CSV\test_copiefichiers.csv" -Delimiter ";" -Encoding Default
$csv1 | Group-Object -Property GROUPES | ForEach-Object {
$ficsourCommun = $_.Group.ninfsource
"$($_.Name) : $ficsourCommun"
foreach ($FileFullName in $ficsourCommun)
{
#création d'un CSV Transitoire non mis en forme "sour.csv"
$FileFullName >> "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\sour.csv"
}
}
#Mise en forme du CSV "sour.csv" création d'un CSV transitoire "source2.csv"
$Out_File = "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\source2.csv"
$sources=get-childItem "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\sour.csv"
Add-Content -Path $Out_file -Value 'source'
foreach($File in $sources) {
$content = Get-content $File
foreach ( $row in $content) {
add-content -Value $row -Path $Out_File
import-Csv -Path $Out_File -Delimiter ";" -Encoding Default |Select-Object Source -Unique|Export-Csv -path "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\source3.csv" -NoTypeInformation -Delimiter ";" -Encoding Default -force
}
}
#Mise en forme du CSV "racinedest.csv" creation d'un CSV transitoire "racinedest2.csv"
$Out_File2 = "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\racinedest2.csv"
$sources2=get-childItem "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\racinedest.csv"
Add-Content -Path $Out_file2 -Value 'destination'
foreach($File2 in $sources2) {
$content2 = Get-content $File2
foreach ( $row in $content2) {
add-content -Value $row -Path $Out_File2
}
}
#Reconstruction du fichier CSV "CSVfinal.csv"
#mise en forme du CSV source avec les en-tête de colonne
import-Csv -Path "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\source3.csv" -Delimiter ";" -Encoding Default |Select-Object Source |Export-Csv -path "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\source.csv" -NoTypeInformation -Delimiter ";" -Encoding Default
#mise en forme du CSV destination avec les en-tête de colonne
import-Csv -Path "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\racinedest2.csv" -Delimiter ";" -Encoding Default |Select-Object destination |Export-Csv -path "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\destination.csv" -NoTypeInformation -Delimiter ";" -Encoding Default
#création du csv final
$1 = Import-Csv "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\source.csv" -Encoding Default
$2 = Import-Csv "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\destination.csv" -Encoding Default
$ht = @( )
for($p = 0 ; $p -le [math]::Max($1.Count,$2.Count)- 1 ; $p++)
{
$myObject = [PSCustomObject]@{}
foreach ($ItemProp in $1[$p].psobject.properties.name)
{
Add-Member -InputObject $myObject -MemberType NoteProperty -Name $ItemProp -Value $1[$p].$ItemProp
}
foreach ($ItemProp in $2[$p].psobject.properties.name)
{
Add-Member -InputObject $myObject -MemberType NoteProperty -Name $ItemProp -Value $2[$p].$ItemProp
}
$ht += $myObject
}
$ht | Export-Csv -Path "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\CSVfinal.csv" -Encoding Default -NoTypeInformation -Delimiter ";"
#suppression des CSV transitoires
Remove-Item "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\racinedest.csv"
Remove-Item "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\source2.csv"
Remove-Item "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\source3.csv"
Remove-Item "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\racinedest2.csv"
Remove-Item "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\sour.csv"
#nettoyage Console
#nettoyage Console
Clear-Host
#copie des fichiers
Import-Csv -Path "C:\Users\Documents\scripts\script de copie de fichiers 1er niveau\csv test\csvfinal.csv" -Delimiter ";" -Encoding Default| ForEach-Object {
$sorc= $_.source
$dst=$_.destination
Get-ChildItem -Path $sorc| where {!$_.PsIsContainer} |Copy-Item -destination $dst -PassThru
}
Write-Host "copie terminée" -ForegroundColor green |