1
votes

Déplacer les fichiers lorsqu'ils contiennent un mot spécifique?

J'essaie actuellement d'écrire un script PowerShell qui examine tous les fichiers d'un répertoire donné et les déplace vers un répertoire différent si un mot spécifique a été trouvé.

Voici ce que j'ai actuellement:

$source = "Z:\Documents\16_Med._App\Aufträge\RuheEKG_24HBP_Skript\Ursprung_test"
$hans = Get-ChildItem Z:\Documents\16_Med._App\Aufträge\RuheEKG_24HBP_Skript\Ursprung_test -filter *.txt -recurse 
foreach($hans in $source) {
    select-string -list -pattern "24BHD" -path $source
}

Maintenant, que dois-je ajouter pour que le script déplace les fichiers contenant la chaîne 24BHD?

Toute aide serait appréciée!


1 commentaires

Vous avez oublié d'utiliser $ hans dans Select-String


3 Réponses :


1
votes

Vous pouvez utiliser une comparaison -match comme ceci:

$source = "Z:\Documents\16_Med._App\Aufträge\RuheEKG_24HBP_Skript\Ursprung_test"
$dest = "C:\destination\directory"
$find = "24BHD"

foreach ($file in (Get-ChildItem "$source\*.txt" -Recurse)) {
    if ($file.Name -match $find) {
        Move-Item $file $dest
    }
}


1 commentaires

Ce n'est pas le nom du fichier qui doit être mis en correspondance, mais le contenu du fichier, d'où la Select-String



1
votes
$source = 'Z:\Documents\16_Med._App\Aufträge\RuheEKG_24HBP_Skript\Ursprung_test'   
$dest = 'c:\dest'

Get-ChildItem $source -filter *.txt -recurse | 
  Select-String -List -Pattern "24BHD" |
  Move-Item -Destination $dest

1 commentaires

@MathieuVIALES Ajout d'une meilleure version et rédaction de quelques explications. J'espère que cela rend les choses plus claires.



1
votes

Vous êtes très proche, mais la syntaxe foreach ne fait pas ce que vous pensez.

Vous devez utiliser foreach ($ item dans $ hans) , où $ hans est la collection de fichiers, et $ item représente chaque 'fichier' dans le tableau pendant la 'boucle'.

(le Le nom de la variable $ item peut être tout ce que vous voulez, c'est juste un exemple que j'ai utilisé)

La propriété FullName contient le chemin complet du fichier , qui est nécessaire pour Select-String -Path .

Ensuite, utilisez Move-Item si Select-String renvoie une correspondance:

$source = 'Z:\Documents\16_Med._App\Aufträge\RuheEKG_24HBP_Skript\Ursprung_test'
$destination = 'C:\Destination'
$pattern = '24BHD'

$hans = Get-ChildItem $source -filter *.txt -recurse 

foreach($item in $hans) {
    if (Select-String -list -pattern $pattern -path $item.fullname) {
        Move-Item -Path $item.fullname -Destination $destination
    }
}


1 commentaires

Merci de m'avoir dit ce que j'ai fait de mal et comment y remédier! J'apprécie beaucoup!