2016-11-22 154 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

相关问题