提前感谢您的帮助。我是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提供实际的数组值(文件名)。
感谢您的帮助!
答案 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
}