shell 如何从所有windows用户appdata\Roaming复制特定文件

new9mtju  于 2022-11-25  发布在  Shell
关注(0)|答案(1)|浏览(157)

我需要从每个Windows用户复制一个特定的文件,该文件位于appdata\Roaming中,并保存到c:\temp“user profile”中。这是代码

$users = (gci $env:systemDrive\users).FullName
foreach ($user in $users) {
write-host $user
Copy-Item -Path "$user\Appdata\Roaming\Notepad++\config.xml" -Destination "C:\temp\$user" -Force -Recurse -ERRORACTION SILENTLYCONTINUE

}

我不知道为什么,但它看起来像它不支持的路径.**我如何在Temp中为每个用户创建一个文件夹,其中包含我从appdata\Roaming复制的文件?**FYI:在未来我将需要做相反的事情。

这是错误:复制项目:不支持指定的路径格式。

我试着在互联网上找到一些解决方案,但没有一个成功。

wribegjk

wribegjk1#

$users = (gci $env:systemDrive\users).FullName
这将在$users中存储 * 完整路径 *,而您只希望使用"C:\temp\$user"中的目录 name
此外,您需要首先确保C:\temp * 中的用户特定目标目录存在 *,然后才能将文件复制到那里。
因此:

$users = Get-ChildItem $env:systemDrive\users # gci is short for Get-ChildItem
foreach ($user in $users) {
  Write-Host $user
  Copy-Item -LiteralPath "$($user.FullName)\Appdata\Roaming\Notepad++\config.xml" `
    -Destination (New-Item -Type Directory -Force "C:\temp\$($user.Name)") `
    -Force -Recurse -ERRORACTION SILENTLYCONTINUE
}

注意事项:

  • 与使用Get-ChildItem返回的目录项的.FullName属性不同,这些项按原样存储在$users中,这允许以后选择性地访问它们的属性,即通过$user.FullName$user.Name
  • 为了将这些属性引用嵌入到可扩展(双引号)字符串("...")中,必须将这些属性引用包含在子表达式运算符$(...)中。
  • New-Item-Type Directory with -Force返回具有给定路径的预先存在的目录或创建该目录。

相关问题