Создайте символические ссылки на результаты поиска папок с помощью команды get-childitem в powershell и назовите их после foldername

#powershell

#powershell

Вопрос:

Я новичок в powershell и пытаюсь выполнить поиск в папке верхнего уровня для любых вложенных папок, которые могут содержать папку с именем «обучение» внутри них, а затем создать символические ссылки в целевой папке для каждого результата, используя имя родительской папки, в которой находится папка «обучение»….. Извините, если это звучит запутанно.

Итак, в основном, поиск «C:company » где , если «c:companytest » в папке была вложенная папка «training», скрипт записывал символическую ссылку на пункт назначения с именем «test», но указывал на «c:companytesttraining «.

У меня есть рабочая команда для поиска результатов поиска в папке, которые я хочу

$folder = gci "TopSearchedFolder" -recurse -filter "training" | Select-Object Parent

И при поиске появляется следующее, что создаст символические ссылки..

New-Item -Itemtype SymbolicLink -path "SymlinkDestinationFolder"

Я просто не уверен, как использовать результаты поиска для создания символических ссылок. Должен ли я использовать For-each или что-то в этом роде? Любая помощь будет оценена. Заранее спасибо.

Ответ №1:

Вам понадобится PowerShell 5.1 или новее.

 Get-ChildItem -Path "TopSearchedFolder" -Filter 'training' -Directory -Recurse | ForEach-Object {
    New-Item -ItemType SymbolicLink -Path "SymlinkDestinationFolder" -Name $_.Parent -Value $_.FullName
}
  

Комментарии:

1. Отлично, спасибо за помощь. Итак, если я правильно понимаю, $_. — это просто перенос передаваемой переменной, и вы можете специально выбирать элементы этой переменной? Еще раз спасибо.

2. @bjones306 Да, это именно то, для чего предназначена автоматическая переменная $_ .

Ответ №2:

Попробуйте это:

 gci "TopSearchedFolder" -recurse -filter "training" | Select-Object -ExpandProperty Parent|Foreach{
New-Item -Itemtype SymbolicLink -path "$($_)"
}
  

$_ является текущим элементом в конвейере и -ExpandProperty только для расширения значений.

Комментарии:

1. После создания вложенной папки с именем «test» в папке «TopSearchedFolder» с папкой «training» в ней, приведенное выше выдает следующую ошибку…… New-Item : Test At line:2 char:1 New-Item -Itemtype SymbolicLink -path "$($_)" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CategoryInfo : InvalidArgument: (:) [New-Item], PSArgumentNullException FullyQualifiedErrorId : ArgumentNull,Microsoft.PowerShell.Commands.NewItemCommand

2. Таким образом, он находит правильную вложенную папку, содержащую тестовую папку, но, похоже, он не хочет создавать символическую ссылку.