Powershell:使用数组和gci

时间:2016-07-28 15:23:03

标签: powershell copy-item

提前感谢您的帮助。我是powershell的新手,对于诺贝尔的问题很抱歉。

问题:我将带有文件名的csv导入数组。该数组由数字(即95325866256)组成,文件名是什么。我的目标是使用数组中的ID从远程系统复制所有文件。这是我试过的:

$array_chipIDs = Import-csv "C:\Data\chipID.csv" -UseCulture
$Export = "C:\Data\Export"
Write-Host -ForegroundColor Cyan "Anzahl der IDs: "$array_chipIDs.count

foreach ($i in $array_chipIDs){
Write-Host -ForegroundColor Yellow $i 

 foreach ($chipID in $array_chipIDs) {  
       Get-ChildItem -Path $pfad1 -Recurse -Include *.sdf, *.idat | select FullName | Copy-Item -Path {$_.Fullname} $export  
    if ($chipID -eq ''){
   break
   }
       }

但是我想念Point给gci提供实际的数组值(文件名)。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

你做错了。您从文件中获取ID并循环遍历它们,但您正在复制的文件来自$ pfad1变量,该变量在任何地方都没有定义。你也没有理由循环两次。

如果您只想将文件从一个文件夹复制到另一个文件夹,请使用此示例。

 $source = "c:\sourcefolder"
 $destination = "c:\destinationfolder\"
 get-childitem -Recurse $source | Where {$_.PSIsContainer -eq $False} | 
     copy-item -Destination $destination

只要您对文件夹拥有权限,就可以将源文件夹和目标文件夹定义为网络路径。

现在,这会将所有文件从源复制到目标。如果您想限制文件的特定类型或扩展名,那么我们可以扩展上述内容。

 $source = "c:\sourcefolder"
 $destination = "c:\destinationfolder\"
 $extensions = @("*.sdf","*.idat")
 foreach($e in $extensions){
     get-childitem -Recurse $source -Filter $e | Where {$_.PSIsContainer -eq $False} | 
         copy-item -Destination $destination

}

然后,此代码将尝试仅添加添加到数组$ extensions的扩展。您可以添加更多扩展程序。

如果您想从excel这样的文件中执行此操作,则可以共享示例。该文件必须具有正确的文件名。如果它没有完整路径,那么您需要在变量中定义实际路径,如source。但除非你举个例子,否则不能说太多。希望这会有所帮助。

答案 1 :(得分:0)

第一个循环只是检查我的csv的导入。但现在这是一个有效的foreach循环。

foreach($chipID in $array_chipIDs) {
   Get-ChildItem -Path $s_path -Recurse -Include "filetype" | Where-Object { $_.FullName -match $chipID.ChipID } | Copy-Item -Destination $export
    }