Вы очень близки, но синтаксис foreach
не делает то, что вы думаете.
Вам необходимо использовать foreach ($item in $hans)
, где $hans
- это набор файлов, а $item
представляет каждый «файл» в массиве во время «цикла».
(имя переменной $item
может быть любым, это просто пример, который я использовал)
Свойство FullName
содержит полный путь к файлу, который необходим для для [ 117].
Затем используйте Move-Item
, если Select-String
возвращает совпадение:
$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
}
}
AFAIK, этот универсальный набор служит в качестве простой обертки для KeyedCollection<KEY,VALUE>
когда KEY
Тип VALUE
сохранить.
Например, очень удобно использовать этот набор, если Вы хотите реализовать фабрику, возвращая одиночные элементы:
public class Factory<T>
{
private readonly KeyedByTypeCollection<T> _singletons = new KeyedByTypeCollection<T>();
public V GetSingleton<V>() where V : T, new()
{
if (!_singletons.Contains(typeof(V)))
{
_singletons.Add(new V());
}
return (V)_singletons[typeof(V)];
}
}
Использование этой простой фабрики было бы чем-то как следующее:
[Test]
public void Returns_Singletons()
{
Factory<ICar> factory = new Factory<ICar>();
Opel opel1 = factory.GetSingleton<Opel>();
Opel opel2 = factory.GetSingleton<Opel>();
Assert.IsNotNull(opel1);
Assert.IsNotNull(opel2);
Assert.AreEqual(opel1, opel2);
}
Другое использование для KeyedByTypeCollection<T>
был бы в сервисном локаторе...