【发布时间】:2016-12-21 20:52:34
【问题描述】:
我正在编写一个脚本,它将遍历文件夹,获取文件夹名称的子字符串作为变量值,然后遍历每个文件夹中的日志文件,并从日志文件中获取一些数据以输出到 . .csv 文件。我遇到的问题是使用 Get-ChildItem 和我已经设置的变量。当我自己运行这一行时,它不提供任何值:
#running this to see the value of $files
$files = Get-ChildItem $_.FullName $folder
$files 不包含任何值。
这是脚本的整个部分,供参考和上下文:
#get all folders from the Logs directory
$folders = Get-ChildItem "C:\Temp\MPOS\Logs"
#iterate through each folder
foreach ($folder in $folders) {
#set substrings of the folder name to variables
$storeNumber = $folder.Name.Substring(2,3)
$date = $folder.Name.Substring(9,7)
#get all files from the current folder being evaluated
$files = Get-ChildItem $_.FullName $folder
#iterate through each file in the current folder
foreach ($file in $files) {
#set substring of the file name to a variable
$registerNumber = $file.Name.Substring(12,4)
#get content of the file
$logfileContent = Get-Content $file
#look for all matches of the string "TransactionNumber"
$transactions = Select-String -InputObject $logfileContent -Pattern "TransactionNumber" -AllMatches
#count number of matches from above
$transactionCount = $transactions.Matches.Count
#below info is creating the object for the .csv
$transObject = New-Object PSObject
$transObject | Add-Member -MemberType NoteProperty -Name "StoreNumber" -Value $storeNumber
$transObject | Add-Member -MemberType NoteProperty -Name "Sales Date" -Value $date
$transObject | Add-Member -MemberType NoteProperty -Name "RegisterNumber" -Value $registerNumber
$transObject | Add-Member -MemberType NoteProperty -Name "Transactions" -Value $transactionCount
$resultsArray += $transObject
}
}
$resultsArray | Export-Csv C:\Temp\MPOS\MPOSTransactions.csv -NoTypeInformation
【问题讨论】:
-
Get-ChildItem $_.FullName $folder这实现了什么? -
@4c74356b41 - 显然没有,没有价值。我想要做的是将 $files 设置为 $folder 中的所有文件。那有意义吗?类似于我将 $folders 设置为“C:\Temp\MPOS\Logs”中包含的所有文件夹的方式。我需要从该目录中的每个文件夹中获取所有文件。我希望这是有道理的。然后我想遍历每个文件并收集数据。我将在我的代码中添加一些 cmets 以提供帮助。
-
$_表示“来自管道的当前对象”。您使用的是foreach语句,而不是ForEach-Object循环,因此$_在您尝试使用它的上下文中没有值。 -
@Bill_Stewart - 谢谢,请问正确的方法是什么?
-
@Bill_Stewart - 明白了,明白了。将其更改为 $folder.FullName - 谢谢!!!
标签: powershell