我有一个快速的项目,我正在为我们的一位副总裁工作。
我们在网络文件共享中存储了几千个CAD作业。文件结构使得CAD作业有一个父文件夹。部分文件夹名称包含作业编号。在文件夹中,有1到多个.ini文本文件,其中包含我需要的连接信息。
我正在寻找一个Powershell解决方案来搜索所有文件夹并从文件夹名称中提取作业编号,并从ini文件中提取所有连接值。
例如,对于名为CM8252390-3的文件夹,作业号为8252390-3。这个文件夹里面有3个ini文件。 ini文件里面的内容如下:
[Connection]
Name=IMP_Acme_3.5
[Origin]
X=-15.044784
Y=19.620095
Z=44.621395
所以我的程序需要给我以下结果
Job Connection
8252390-3 IMP_Acme1_3.5
8252390-3 IMP_Acme2_3.5
8252390-3 IMP_Acme3_3.5
8254260-1 IMP_Acme3_2.4
8254260-1 IMP_Acme3_4.1
...continued for all folders in the network share
寻找有关如何执行此操作的一些Powershell示例。我是Powershell新手,因此经验有限。有一些使用Windows / DOS bat文件等的经验
谢谢。
更新
我做得更远了。这是我到目前为止所拥有的。它将文件夹名称解析为$ job_num。
Get-ChildItem C:\temp\pwrshell | ForEach-Object -Process { if ($_.PSIsContainer)
{
if ($_.Name.Substring(0,2) -eq 'CM')
{
$job_num = $_.Name.Substring(4)
}
elseif ($_.Name.Substring(0,3) -eq 'Pri' -or 'Hyb' -or 'Had' -or 'Dmo')
{
$job_num = $_.Name.Substring(5)
}
$_.Name+' '+$job_num
}
}
希望有人可以提供帮助,并为我提供ini文件读取的代码。如果他们等我解决,VP可能会找到另一种解决方案。
答案 0 :(得分:0)
这可能会提供您正在寻找的输出:
# // Declare an array to hold job objects
$aJobs = @()
Get-ChildItem C:\temp\pwrshell | ForEach-Object -Process {
if ($_.PSIsContainer)
{
# // Store subfolder path in a variable
$sFolderPath = $_.FullName
if ($_.Name.Substring(0,2) -eq 'CM')
{
$job_num = $_.Name.Substring(2) # // Edited, value 4 returns incomplete string
}
elseif ($_.Name.Substring(0,3) -eq 'Pri' -or 'Hyb' -or 'Had' -or 'Dmo')
{
$job_num = $_.Name.Substring(5)
}
$_.Name+' '+$job_num
# // Loop through all files in folder with .ini extension
Get-ChildItem $sFolderPath | Where {$_.Extension -like '.ini'} | foreach {
$sFilepath = $_.FullName
# // Read file contents
$aFiledata = Get-Content $sFilepath
# // Loop through file lines, looking for line starting with Name=
foreach ($sFileline in $aFiledata)
{
if ($sFileline.SubString(0,5) -eq 'Name=')
{
$connection_name = $sFileline.SubString(5)
# // Create a custom PowerShell object to hold values
$JobObject = New-Object PSCustomObject -Property @{
"Job" = $job_num
"Connection" = $connection_name
}
# // Add job object to array
$aJobs += $JobObject
}
}
}
}
}
# // Display output
$aJobs | Format-Table Job,Connection