2016-01-27 2 views
0

Je suis en train d'importer un fichier CSV et boucle à travers toutes les entrées pour rechercher une correspondance (les noms de fichiers auront également une autre chaîne dans le nom), après, je le veulent mettre le match dans le répertoire approprié, qui porte le nom du fichier CSVRechercher une chaîne dans le nom et déplacer le fichier selon

pour Exemples:

Fichiers je:

PTP Rapport (12314)

test (124523)

Je veux:

./12314/Rapport PTP (12314)

./12314/Rapport PTP (12453)

Mon fichier CSV contient tous les numéros qui doivent être recherchés dans un répertoire.

EDIT: Jusqu'à présent, je suis venu avec cela, mais pour certaines raisons, il donne juste faux ...

Set-Location "d:\PTP" 

$Folders = Import-Csv D:\data\Documents\buse1.csv 
$FileList = Get-ChildItem -Path D:\PTP 

ForEach ($Folder in $Folders) { 
foreach ($File in $FileList) { 
    $contains = $File.Name -like "*$($Folder.Name)*" 
    if ($contains) { 
     $Destination = 'd:\test1\{0}' -f, $folder.name; 
     mkdir -Path (Split-Path -Path $Destination -Parent) -ErrorAction  SilentlyContinue; 
     Move-Item -Path $folder.Name -Destination $Destination -WhatIf; 
    } 

} 

} 
+0

Ainsi, le numéro dans le nom de fichier est le même que celui d'un numéro que vous avez du CSV? –

+0

oui, désolé si je n'étais pas clair. @ MathiasR.Jessen – Jtesuce

Répondre

0

C'est ce qui déclenche votre logique:

$File.Name -contains $Folder.Name; 
if($contains){ 
    # ... 
} 

-contains œuvres sur les collections (tableaux, listes, enumerables), mais ne fait pas une recherche de sous-chaîne:

PS> "Long","string" -contains "string" 
True 
PS> "Long string" -contains "string" 
False 

Utilisez -match ou -like lorsque vous faites la comparaison de chaînes à la place:

$File.Name -like "*$($Folder.Name)*" 

ou:

$File.Name -match [regex]::Escape($Folder.Name) 

En outre, $contains n'existe pas - vous devez affecter le résultat de la comparaison pour votre if() déclaration à travailler:

$contains = $File.Name -like "*$($Folder.Name)*" 
if($contains){ 
    # We got a match! 
} 

ou effectuer la comparaison dans la déclaration if():

if($File.Name -match [regex]::Escape($Folder.Name)){ 
    # We got a match! 
} 
+0

Merci, maintenant je crois que j'ai corrigé la logique, il semble qu'il a du mal à créer le fichier. une idée pourquoi? J'ai réussi à l'obtenir pour créer les fichiers. Je devrais comprendre comment copier les fichiers là maintenant. Merci beaucoup pour votre aide! – Jtesuce

+0

Vos instructions 'mkdir' et' Move-Item' dans l'exemple de script que vous avez fourni n'ont pas de sens - vous créez le dossier parent d'un dossier que vous savez déjà exister, puis déplacez le dossier dans le même dossier parent où il est déjà existe en premier lieu –