Dan,
Когда вы используете команду Get-ChildItem (псевдоним gci), она вернет вам массив объектов DirectoryInfo и FileInfo, по одному для каждого найденного элемента. Если вы ищете файлы под названием «Закладки» (или bookmark.txt ... из ваших примеров не можете определить, какой из них вы ищете), вы можете использовать следующую команду, чтобы получить список всех из них:
[array]$FileList = gci -Recurse -File -Filter "Bookmarks"
Обозначение [array]
необходимо, чтобы объект был массивом независимо от того, сколько элементов возвращено. Фильтр может содержать символы подстановки, если вы не знаете точного имени файла. Что меня оставляет, так это массив объектов с именем $FileList
, содержащий всю информацию о файлах. Вы можете прочитать все о свойствах и методах, доступных в этих объектах , на этой странице справки Microsoft .
Для этой задачи нам понадобится свойство .FullName
, которое сообщает вам полную информацию путь и имя каждого элемента (который может использоваться в качестве источника) и свойства .BaseName
& .Extension
, которые дают вам имя файла и расширение соответственно. Используя эти свойства, вы можете скопировать каждый из найденных файлов в место назначения. Собрав все это вместе, вы получите что-то вроде этого:
$SourceFolder = "$($env:userprofile)\AppData\Local\Microsoft\Edge\User Data"
$DestFolder = '' #Path to Destination Folder
[array]$FileList = gci -Path $SourceFolder -Recurse -File -Filter "Bookmarks"
ForEach ($F in $FileList) {
Copy-Item $F.FullName (Join-Path $DestFolder ($F.Name + 'stuff to add to end of filename' + $F.Extension))
}
В этом случае, поскольку файлы называются «Закладки», $ F.Extension должно быть пустым. При использовании более традиционного имени файла приведенный выше шаблон поможет вам подогнать изменения между именем файла и расширением.
Надеюсь, это поможет вам. Если да, примите ответ, используя галочку слева.