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!
3 Réponses :
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
}
}
Ce n'est pas le nom du fichier qui doit être mis en correspondance, mais le contenu du fichier, d'où la Select-String
$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
@MathieuVIALES Ajout d'une meilleure version et rédaction de quelques explications. J'espère que cela rend les choses plus claires.
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
}
}
Merci de m'avoir dit ce que j'ai fait de mal et comment y remédier! J'apprécie beaucoup!
Vous avez oublié d'utiliser
$ hansdansSelect-String