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

时间:2018-08-10 09:06:57

标签: file powershell filesystems

我正在尝试自动化一个简单的桌面清除程序,并且尝试编写一个命令来还原程序执行的所有操作。当前,我的程序将桌面上的所有内容分类到一个名为“ media”的文件夹(位于桌面上)中,该文件夹包含每个类别的项目的进一步子目录。本质上,

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

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

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

这会产生Powershell尝试移动其ACTUAL路径类似于以下内容的对象的问题:

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

那么我将如何修改命令,以便将正确的路径传递给move-item指令,同时又将执行位置保持为“ media”?

1 个答案:

答案 0 :(得分:0)

希望我在这里了解您的问题。 您确实不需要 foreach-Object 来执行此操作。 这将占用源文件夹中的所有内容,并将其移动到目标文件夹(在您的情况下为桌面)

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