【发布时间】:2018-02-27 03:01:18
【问题描述】:
关于我的意图的一点背景:
第一个函数 GetFileNames 的目的是读取包含有关许多设施的数字信息的主文件夹中的目录,并返回带有它们的 BaseName 的文件列表。
第二个函数,SplitFileNames,获取 GetFileNames 的输出,并使用下划线作为分隔符将名称拆分为 3 部分。文件名的结构都是这样的; SITECODE_FACNUM_FILETYPE,例如 DKFX_00099_MAP。这 3 个部分中的每一个都形成了单独的列,然后我将这些列导入 Access 中的数据库中。
另外,在此之前我从未使用过 Powershell,到目前为止我的经验基本上是逆向工程和拼接来自多个来源的代码的组合,显然是我自己的一些写作。
我的问题/尊敬的请求是:
我几乎可以肯定一定有更好的方法来完成我想要完成的事情,而且我只是对我所经历的信息没有足够的理解它发生了。因此,我绝对会感谢任何改进建议。
我还需要包含在 FullName 列中的超链接信息,但不幸的是我无法让它正常工作,因为我必须将 BaseName 分成 3 部分。
谢谢!
$targetPath = "C:\Users\mattm\Google Drive\TestDatabase\"
$outputPath_1 = "C:\Users\mattm\Google Drive\Powershell Scripts\Facilities Database Scanner\outputScan_1.csv"
$outputPath_2 = "C:\Users\mattm\Google Drive\Powershell Scripts\Facilities Database Scanner\outputScan_2.csv"
$delimPath = "_"
Function GetFileNames([string]$path, [string]$outputFile) {
$list = Get-ChildItem $path -Recurse | where {!$_.PSIsContainer}
$list | Select-Object BaseName | Export-Csv -NoTypeInformation $outputFile
}
GetFileNames $targetPath $outputPath_1
Function SplitFileNames([string]$inputFile, [string]$outputFile) {
$inputData = Get-Content $inputFile | select -Skip 1
$array = @()
$outArray = @()
$inputData | Foreach{
$elements = $_.split($delimPath)
$array += ,@($elements[0], $elements[1], $elements[2])
}
Foreach($value in $array){
$outArray += New-Object PSObject -Property @{
'SiteCode' = $value[0]
'FacilityNumber' = $value[1]
'FileTypeCode' = $value[2]
}
}
$outArray | Select-Object "SiteCode","FacilityNumber","FileTypeCode" | ConvertTo-Csv -NoTypeInformation | % {$_ -replace '"',""} | Out-File $outputFile -fo -en ascii
}
SplitFileNames $outputPath_1 $outputPath_2
【问题讨论】:
-
“FullName 中包含的超链接信息”到底是什么意思?
-
FileInfo类的属性,调用Get-ChildItem cmdlt时返回。它获取文件或目录的完整路径。
-
现在我更加困惑了。您在寻找什么样的文件?我的客户没有同名的房产。
-
这很奇怪,我相信我在我的桌面上运行 Powershell 5.0,并且我正在寻找所有文件类型。我拥有的基本上是 11k+ 文档和图片(如地图、现场检查等),它们都根据它们所属的设施分类到文件夹中。当他们继续向这些文件夹中添加新的数字文档时,我希望他们能够执行此脚本并返回文件夹中所有文件的列表,并且我需要输出有 4 列;站点代码、设施编号、文件类型(地图、图片、契约等)、文件路径(我用来在 Access 中创建超链接)。
-
我很抱歉,我现在意识到我的 FileTypeCode 非常具有误导性。我实际上并不关心它是 PDF、XML、JPEG 还是其他格式,在我的上下文中,它指的是文档的简写形式。例如,特定设施的平面图文件名可能是 LUAJ_00090_FLRPLN.pdf
标签: powershell