2014-09-26 115 views
0

有沒有一種方法可以使用PowerShell創建基於文件擴展名的文件夾,並將這些文件移動到這些文件夾中。例如,我有.jpg文件和.txt文件。我希望powershell查看哪些文件是.txt,然後創建一個名爲textfiles的文檔並將所有.txt文件移動到該文件夾​​中。 我所有的文件都位於C:\ testfiles如何基於PowerShell中的文件擴展創建文件夾

$files = 'C:\testfiles\*.txt' 
$foundfiles = Get-ChildItem $files -Filter *.txt -Force -Recurse 
new-item $foundfiles -type directory 

我知道這不會使SENCE。真正需要幫助的

我的腳本

Get-ChildItem 'C:\testfiles' -Filter *.txt | Where-Object {!$_.PSIsContainer} | Foreach-Object{ 

$dest = Join-Path $_.DirectoryName $_.BaseName.Split()[0] 

if(!(Test-Path -Path $dest -PathType Container)) 
{ 
    $null = md $dest 
} 

$_ | Move-Item -Destination $dest -Force 
} 

這個完美的作品,但問題是我在10個不同位置的文件。但在我的劇本中,我只給出了一條路徑。我怎麼可以指定1個多位置

+0

是的,有一種方法。你試過什麼了? – Raf 2014-09-26 10:19:07

+0

$ files ='C:\ testfiles \ * .txt' $ foundfiles = Get-ChildItem $ files -Filter * .txt --Force -Recurse new-item $ foundfiles – srk786 2014-09-26 10:23:34

+0

hi raf我剛剛修改問題 – srk786 2014-09-26 10:25:02

回答

0

你可以做到這一點的步驟:
1.獲取所有文件

#Get all files 
[ARRAY]$arr_Files = Get-ChildItem -Path "C:\temp" -Recurse -Force 


2.看返回propertys

$arr_Files | fl * 


3.現在你看到一個「Extension:.zip」。所以你可以看看這個文件夾是否存在,什麼時候不存在然後創建它。之後,移動文件夾中的文件。

#For each file 
Foreach ($obj_File in $arr_Files) { 

    #Test if folder for this file exist 
    If (!(Test-Path -Path "C:\Temp$($obj_File.Extension)")) { 
     New-Item -Path "C:\Temp$($obj_File.Extension)" -ItemType Directory 
    } 

    #Move file 
    Move-Item -Path $obj_File.FullName -Destination "C:\Temp$($obj_File.Extension)\$($obj_File.Name)" 
} 


現在你要看看那Get-ChildItem -Path "C:\temp" -Recurse -Force只返回文件沒有文件夾。

+0

我剛剛修改我的腳本 – srk786 2014-09-26 11:05:15

1

試試這個,它會動態創建的文件列表中的目錄中$roots

$roots = @("d:\temp\test","C:\testfiles") 

foreach($root in $roots){ 
    $groups = ls $root | where {$_.PSIsContainer -eq $false} | group extension 
    foreach($group in $groups){ 
     $newPath = Join-Path $root ($group.Name.Substring(1,($group.Name.length - 1))) 
     if((Test-Path $newPath) -eq $false){ 
      md $newPath | Out-Null 
     } 
     $group.Group | Move-Item -Destination $newPath 
    } 
} 
+1

非常好的使用'Join-Path'這就是它的用途。 – Matt 2014-09-26 11:06:08

0

怎麼樣的東西有點更優雅?

$Files = GCI c:\testfiles\ 
$TXTPATH = <PATH> 
$JPGPATH = <PATH> 
Switch ($Files){ 
    {$_.Extension -eq '.TXT' } { move-item $_.fullname $TXTPATH -force } 
    {$_.Extension -eq '.JPG' } { move-item $_.fullname $JPGPATH -force } 
    } 

這應該做到嗎?

相關問題