2013-03-25 58 views
2

我想從某個子目錄複製某個類型的所有文件,並將其相對路徑從該子目錄複製到另一個相對路徑完好的路徑。例如: -複製具有相對路徑的文件

源子DIR:

c:\temp\sourcedirectory 

源文件:

c:\temp\sourcedirectory\tonymontana\fileOne.txt 
c:\temp\sourcedirectory\poker\fileTwo.txt 

目標目錄:

c:\temp\targetdirectory 

期望的結果:

c:\temp\targetdirectory\tonymontana\fileOne.txt 
c:\temp\targetdirectory\poker\fileTwo.txt 

到目前爲止,我想出了:

Set-Location $srcRoot 
Get-ChildItem -Path $srcRoot -Filter $filePattern -Recurse | 
    Resolve-Path -Relative | 
    Copy-Item -Destination {Join-Path $buildroot $_.FullName} 

然而,這種「一切都是對象」點菜PowerShell是打我下來(至少這是我懷疑)。即文件被複制,但沒有它們的相對路徑。

任何人誰可以啓發我一點?

+0

*「誰能夠告訴我一點嗎?」 * - 它看起來像微軟了一些簡單的工作,並將其複雜到不再起作用的地步。當開發人員不得不聯機並查找如何使用複製命令時,這很讓人傷心。什麼是微軟的史詩般的工程失敗。 – jww 2017-08-23 18:38:22

+0

@jww老兄,你在說什麼?常規復制命令不會複製具有相對路徑的文件,也不會有。這總是需要腳本或使用專門的工具,如'xcopy','robocopy','rsync'等。 – 2017-08-23 19:23:26

回答

5

不要使用PowerShell命令爲此費心,只需使用robocopy

robocopy C:\temp\sourcedirectory C:\temp\targetdirectory *.txt /s 
+0

啊,不知道這個,簡單而有效,非常感謝。 – PistolPete 2013-03-25 13:53:14

+0

當你擁有唯一的shell時,你怎麼不能使用PowerShell? – jww 2017-08-23 18:38:48

+0

@jww請仔細閱讀。 Robocopy在PowerShell中的工作方式與CMD中的相同。這種任務不需要PowerShell ** cmdlet **。 – 2017-08-23 18:42:39

1

試試這個:

Copy-item $srcRoot -destination $destination -recurse 
+0

這將包括相對路徑中的實際srcRoot,當然,我可以迭代來自srcRoot的子dirs並根據您的建議與過濾器參數一起管道。 – PistolPete 2013-03-25 13:52:13

+0

謝謝你的方式。 – PistolPete 2013-03-25 13:57:14

2

你可以試試這個:

$srcroot = "c:\temp\sourcedirectory" 
$builroot= "c:\temp\targetdirectory" 
gci -path $srcroot -filter $filepattern -recurse | 
    % { Copy-Item $_.FullName -destination ($_.FullName -replace [regex]::escape($srcroot),$builroot) } 
+0

在替換操作中出現了一些問題,構建目錄沒有被預置,但是源被刪除。可能是「DOOH!錯誤在我的結尾。謝謝無論如何。 – PistolPete 2013-03-25 13:56:36

1

防止複製該文件夾本身即創建

c:\temp\targetdirectory\sourcedirectory 

指定文件(通常用通配符)的文件夾作爲源,而不是:

Copy-item c:\temp\sourcedirectory\*.txt -destination c:\temp\targetdirectory -recurse