2016-11-22 199 views
0

我有一個文件夾Dynamcially從文件夾和子文件夾的文件複製到目標

d:\項目\ PowerShell的\共同

常見的文件夾裏,有很多得了子文件夾和子文件夾的子。我想實現的是尋找一個CSV文件,並複製到:

E:\項目\ PowerShell2 \共同

** d:\項目\ PowerShell的\通用和E:\項目\ PowerShell2 \ Common有相同的目錄結構。

d:\項目\ PowerShell的\共同\地理位置\ ABC.csv

d:\項目\ PowerShell的\共同\地理位置\ MEA.csv

d:\項目\ PowerShell的\ COMMON \區\ ASA.csv

複製到

E:\項目\ PowerShell2 \ COMMON \土工\ ABC.csv

E:\項目\ PowerShell2 \ COMMON \土工\ MEA.csv

E:\項目\ PowerShell2 \ COMMON \區\ ASA.csv

我能做到這一點,如果我確切指定類似下面的位置,但我希望腳本能夠動態地處理它而不是硬代碼。如果存在相同的文件,只需替換它們即可。

$Src = 'D:\Projects\PowerShell\Common\Geo' 
$Dst = 'E:\Projects\PowerShell2\Common\Geo' 

$Extension = '*.csv' 

Get-ChildItem -Path $Src -Filter $Extension -Recurse | 
Where-Object {!$_.PsIsContainer} | 
    # For each file 
    ForEach-Object 
    { 
     some code 
    } 
+0

「*我想希望腳本能處理它動態而不是硬代碼。*「 - 用例子解釋你想如何表現?你可以在文件路徑中「 - 替換」D:\ Projects \ PowerShell \ Common「,」E:\ Projects \ PowerShell2 \ Common「 – TessellatingHeckler

+0

是的,可以。如果存在相同的文件,只需替換它們 – user1902849

+0

好的,那麼你的問題是什麼?你想讓代碼神奇地知道你的源文件夾和目標文件夾,而不必告訴它? – TessellatingHeckler

回答

1

試試這個,複製及建立在同一時間目錄(如果不存在)

$source='D:\Projects\PowerShell' 
$destination='E:\Projects\PowerShell2' 

gci $source -file -Filter "*.csv" -Recurse | 
%{$newfile=$_.Directory -replace [regex]::Escape($source), $destination; copy-item -Path $_.FullName -Destination (new-item -type directory -force $newfile) -force -ea 0} 

,如果你想記錄複製的文件

$source='D:\Projects\PowerShell' 
$destination='E:\Projects\PowerShell2' 
$logfile="c:\temp\mylog.log" 

gci $source -file -Filter "*.csv" -Recurse | 
%{$newfile=$_.Directory -replace [regex]::Escape($source), $destination; copy-item -Path $_.FullName -Destination (new-item -type directory -force $newfile) -force -ea 0 -PassThru | 
%{ $_.fullname | out-file $logfile -Append}} 
+0

它不工作。 – user1902849

+0

我已修改我的代碼並進行測試,這是工作 – Esperento57

+0

謝謝。如何包含多個濾鏡?例如,我想搜索所有csv和xlsx文件?我試圖把-Filter「* .csv,*。xlsx」但不起作用 – user1902849

相關問題