2013-08-17 114 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

相關問題