如何使用 PowerShell 脚本将所有项目从桌面移动到目标文件夹?

如何使用 PowerShell 脚本将所有项目从桌面移动到目标文件夹?

我的问题是,如果我使用移动项目功能,它将删除桌面文件夹,而且我也不想移动“回收站”应用程序/快捷方式以及另一个自定义文件“logs.txt”。除了这 2 个项目之外,我希望将所有其他文件夹、文件和快捷方式移动到目标文件夹(“C:\Temp”)。当我尝试使用带有 * 的移动项目(即 C:\Users\Username\Desktop*)来“移动所有内容”时,它只移动了所有文件,并没有保留文件夹/文件夹结构。它只是将所有文件从所有文件夹中拉出来。

如何移动文件和文件夹,同时保留文件夹结构/层次结构,并排除某些文件(特别是上面列出的文件)?

该脚本将自动用于保持用户桌面整洁。“Temp”文件夹是存储未分类的文件和目录的地方,直到用户对每个文件和目录进行正确的排序。

以下是我目前所掌握的信息:

$dest = "C:\Temp\"; 
$currentPath = "$($env:USERPROFILE)\Desktop\"; 
try {
    Move-Item -Path $currentPath -Destination $dest
}
catch {
   ...
}

也尝试过这个:(得到相同的结果)

$dest = "C:\Temp\"; 
$currentPath = "$($env:USERPROFILE)\Desktop\";  
try {
    Get-ChildItem -Path $currentPath -Recurse | Move-Item -Destination $dest
}
catch {
   ...
}

我是否需要将其分解并使用复制项目和删除项目功能将文件添加到新文件夹,然后删除旧位置,即桌面上的原始副本?

答案1

Move-Item在线文档 笔记部分:

此 cmdlet 将在同一提供程序支持的驱动器之间移动文件,但仅在同一驱动器内移动目录。

由于 Move-Item 命令会移动项目的属性、内容和子项目,因此默认情况下所有移动都是递归的。

因此,不清楚您的哪个代码示例为您提供了一个平面目录(所有文件,但没有子文件夹)。第一个应该不是,但第二个会,因为你递归获得这些项目,但它们Move-Item作为单独的对象通过管道传输,且均有一个目的地。

  • 为了避免移动Desktop文件夹本身,您需要将其附加\* 到源路径。这将选择文件夹中的所有项目,但不选择文件夹本身。
  • 使用-Exclude参数将“logs.txt”保存在桌面上。
  • 如果同一台计算机上有多个用户,您可能需要考虑在用户配置文件中创建 destinatino 文件夹。
$dest = "C:\Temp\"

# Querying the shell for the path of the known folder is more robust because it works when the folder has been re-directed:

$UserDesktopPath = (New-Object -Com shell.application).Namespace("Shell:ThisPCDesktopFolder").Self.Path
try {
    Move-Item -Path "$UserDesktopPath\*" -Destination $dest -Exclude 'logs.txt'
}
catch {
    # ...
}

有趣的是,虽然该-Excluse参数按预期工作,但也会引发错误:

Move-Item : Cannot move item because the item at
'C:\Users\keith\DummyDesktop\logs.txt' does not exist.
At line:7 char:5
+     Move-Item -Path "$UserDesktopPath\*" -Destination $dest -Exclude  ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Move-Item], PSInvalidOperatio
   nException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.MoveI
   temCommand

可以通过添加参数来抑制此显示-ea silent


  • 请记住,桌面上的某些项目可能来自c:\Users\Public\Public Desktop
  • Recycle Bin以及This PCNetworkUsersFilesControl Panel不是文件系统项,而是虚拟文件夹或命名空间连接点。是否显示这些内容由Desktop Icons通过 访问的对话框控制Settings > Personalization > Themses

相关内容