在Powershell中,如何将文件夹中的所有文件移动到新的子目录?将文件夹中的所有文件移动到新的子目录
我试过mv c:\foo\* c:\foo\bar\
,但是我所有的文件都消失了,我得到一个扩展名较小的'bar'文件。首先制作目录也不起作用,因为它会尝试将“栏”移动到其自身。
在Powershell中,如何将文件夹中的所有文件移动到新的子目录?将文件夹中的所有文件移动到新的子目录
我试过mv c:\foo\* c:\foo\bar\
,但是我所有的文件都消失了,我得到一个扩展名较小的'bar'文件。首先制作目录也不起作用,因为它会尝试将“栏”移动到其自身。
您可以轻松链接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
向-Directory
的Get-ChildItem
cmdlet将使其易于完全跳过where子句,只是把它做初步筛选。
这应该做你想做的。首先创建一个名为$myDir
的变量,它具有所需父目录的完整路径。
New-Item $myDir"\TestDirectory" -type directory
$files = Get-ChildItem $myDir\*.*
Move-Item $files $myDir"\TestDirectory"
使用单一*
也将选择子目录,这可能是你的问题的一部分,如果你在不经意间选择的新目录中移动,也可以作为在同一行动目标。 *.*
应该匹配文件。一旦你对他们正在做的事情感到满意,随意浓缩这些陈述。
这个解决方案教会了我可以在命令行上使用变量,并且可以手动执行我通常会考虑的操作一个脚本。 – SixOThree
尝试使用'mv c:\ foo \ * c:\ foo \ bar' –