2016-03-01 4 views
1

Структура папки Я работаю с выглядит следующим образом:Не удается переместить подкаталоги, соответствующие определенным критериям, в соответствующие папки.

-Clients 
-Walmart 
    -00001 
    -00001 
    -00001 
    -00001 
    -Letters 
    -Numbers 

-Lowes 
    -00001 
    -00001 
    -00001 
    -00001 
    -Letters 
    -Numbers 

В каждой вложенной директории Clients (Walmart & Lowes в данном случае), я хотел бы взять каждую папку, содержащую номер в его названии и переместите его в подпапку «Числа».

До сих пор мне удалось поставить это вместе:

$source = "Clients" 
$dirs = dir $source 
foreach ($folder in $dirs) | Where-Object {$_.Name -match "\d"} 
{ 
    Move -Destination $folder\Numbers 
} 

Но это не сработало, что я ожидал. По какой-то причине мне трудно найти, как сказать, что такое мое назначение. Каков наилучший способ приблизиться к этому? Я пропустил что-то простое или делаю это сложнее, чем нужно? Я ценю любую помощь!

+0

Хотя я уверен, что ваша проблема в этом случае _Но это не сработало, это не описательная проблема. Я уверен, что вы получили хотя бы ошибки, которые должны быть включены здесь. – Matt

ответ

1

Ваш where фрагмент неуместен и синтаксически неверен. Он должен находиться внутри цикла, проверяя каждый подкаталог клиентов для совпадений. Пара других вариантов доступна вам, но этот должен сделать трюк.

$source = "Clients" 
# Get all the clients 
$clients = Get-ChildItem $source -Directory 

# Traverse each clients folder looking for mumbers 
$clients | ForEach-Object{ 
    $clientFolder = $_ 
    Get-ChildItem $clientFolder.FullName -Directory | 
     Where-Object{$_.Name -match "\d"} | 
     Move-Item "$clientFolder\Numbers" 
} 

Мы не проверяем, что -destination существует, так что может быть источником ошибок. Если они всегда существуют, вам не следует беспокоиться. Все-таки хорошая практика на всякий случай.

$clientNumbersFolder = "$clientFolder\Numbers" 
If(-not Test-Path $clientNumbersFolder){New-Item -Path $clientNumbersFolder -ItemType Directory | Out-Null} 
Move-Item "$clientFolder\Numbers" 
Смежные вопросы