2013-08-17 40 views
3

在Powershell中,如何将文件夹中的所有文件移动到新的子目录?将文件夹中的所有文件移动到新的子目录

我试过mv c:\foo\* c:\foo\bar\,但是我所有的文件都消失了,我得到一个扩展名较小的'bar'文件。首先制作目录也不起作用,因为它会尝试将“栏”移动到其自身。

+0

尝试使用'mv c:\ foo \ * c:\ foo \ bar' –

回答

3

您可以轻松链接Get-ChildItem(别名为dir)和Move-Item(别名为mv),以便在一条简单的线上执行移动。唯一真正的技巧是,你需要指定-Destination参数(简称-dest):

dir c:\foo\* | mv -dest c:\foo\bar 

还有一两件事值得一提,你可能要过滤掉的目录 - 在你的情况下吧foo的嵌套 - 它尝试将其移动到自身并没有任何意义,并且会出现错误。如果您需要通过Where-Object过滤掉的目录,你只管它(别名为?)的cmdlet:

dir c:\foo\* | ? {-not $_.PSIsContainer} | mv -dest c:\foo\bar 

$_是因为它是由Where-Object认为指向每个对象在管道中的自定义变量小命令。 PSIsContainer属性是添加到文件系统对象的特殊注释属性,可以轻松识别文件夹(或不是)。

还值得一提的是,在PowerShell中v3中,它们都添加和-File-DirectoryGet-ChildItem cmdlet将使其易于完全跳过where子句,只是把它做初步筛选。

2

这应该做你想做的。首先创建一个名为$myDir的变量,它具有所需父目录的完整路径。

New-Item $myDir"\TestDirectory" -type directory 
$files = Get-ChildItem $myDir\*.* 
Move-Item $files $myDir"\TestDirectory" 

使用单一*也将选择子目录,这可能是你的问题的一部分,如果你在不经意间选择的新目录中移动,也可以作为在同一行动目标。 *.*应该匹配文件。一旦你对他们正在做的事情感到满意,随意浓缩这些陈述。

+0

这个解决方案教会了我可以在命令行上使用变量,并且可以手动执行我通常会考虑的操作一个脚本。 – SixOThree

相关问题