0

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

问题:我将带有文件名的 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
   }
       }

但我错过了给 gci 实际数组值(文件名)的点。

感谢帮助!

4

2 回答 2

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 之类的文件中执行此操作,则可以共享一个示例。该文件必须具有正确的文件名。如果它没有完整路径,那么您需要在源等变量中定义实际路径。但是除非你给我们举个例子,否则不能说太多。希望这可以帮助。

于 2016-07-29T06:19:54.080 回答
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
    }
于 2016-07-29T15:18:54.430 回答