Powershell:递归地将文件夹中的所有非目录子项转储到特定路径

Powershell: recursively dumping all non-directory child items in a folder into a specific path

我正在尝试自动执行一个简单的桌面清理程序,并且我尝试编写一个命令来恢复我的程序所做的一切。目前,我的程序将我桌面上的所有内容分类到一个名为 "media" 的文件夹(在桌面上),其中包含每个类别的项目的更多子目录。本质上,

Desktop >> Media >> {bunch of dirs for item categories}

所以我正在尝试编写一个命令,从子目录中获取所有已排序的项目并将它们转储回桌面而不移动文件夹本身。到目前为止我已经尝试过:

dir -attributes !directory -recurse | foreach-object {move-item $_ -destination "$home/desktop"}

这会导致 powershell 尝试移动实际路径类似于以下内容的对象的问题:

C:\________\desktop\media\images\sample.jpg

使用此路径:

C:\________\desktop\media\sample.jpg

因为我是从"media"文件夹执行命令,导致出现这样的错误:

move-item : Cannot find path 'C:\Users\bhiggins\desktop\media\Basic Engineering Circuit Analy - J. David Irwin.pdf' because it does not exist. At line:1 char:55 + ... -recurse | foreach-object {move-item $_ -destination "$home/desktop"} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\Users\bhiggi...David Irwin.pdf:String) [Move-Item], ItemNotFou ndException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.MoveItemCommand

那么我该如何修改我的命令,以便将正确的路径传递给移动项目指令,同时保持执行位置为 "media"?

希望我能理解您的问题。 您真的不需要 foreach-Object 来执行此操作。 这将获取源文件夹中的任何内容并将其移动到目标文件夹(在您的情况下为桌面)

Get-ChildItem -Path $path -recurse | Move-Item -Destination $destination