PowerShell-一次计算文件夹中所有文件的accdb行数

PowerShell-一次计算文件夹中所有文件的accdb行数,powershell,ms-access,count,powershell-3.0,Powershell,Ms Access,Count,Powershell 3.0,我知道我可以使用powershell在不打开csv的情况下计算csv有多少行。 例如: 我需要对多访问文件(.accdb)执行此操作。这一次是针对给定文件夹中的每个(和所有)文件,然后我要将行相加(该文件夹中所有文件的总和)。有解决办法吗 谢谢我放弃了使用powershell。 但是,我通过使用SQl服务集成服务来计算所有行。使用foreach(循环所有文件),循环内部是一个任务,每个文件都有一个select计数,并将结果输出到xls 感谢大家抽出宝贵的时间为了方便将来的访问者,下面是一个Pow

我知道我可以使用powershell在不打开csv的情况下计算csv有多少行。 例如:

我需要对多访问文件(.accdb)执行此操作。这一次是针对给定文件夹中的每个(和所有)文件,然后我要将行相加(该文件夹中所有文件的总和)。有解决办法吗


谢谢

我放弃了使用powershell。 但是,我通过使用SQl服务集成服务来计算所有行。使用foreach(循环所有文件),循环内部是一个任务,每个文件都有一个select计数,并将结果输出到xls


感谢大家抽出宝贵的时间

为了方便将来的访问者,下面是一个PowerShell脚本,它统计指定文件夹中每个.accdb文件的非系统表中的所有行:

$connStrStub = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
$numFiles = 0
$numTables = 0
$totalRows = 0
foreach ($f in Get-ChildItem -Path C:\Users\Public\test\*.accdb)
{
    $numFiles++
    $conn = New-Object System.Data.OleDb.OleDbConnection ($connStrStub + $f.FullName)
    $conn.Open()
    $schemaTable = $conn.GetSchema("TABLES")
    foreach ($dtRow in $schemaTable)
    {
        $tblName = $dtRow["TABLE_NAME"]
        if (!$tblName.StartsWith("MSys"))
        {
            $numTables++
            $cmd = New-Object System.Data.OleDb.OleDbCommand "SELECT COUNT(*) AS n FROM [$tblName]", $conn
            $totalRows += $cmd.ExecuteScalar()
        }
    }
    $conn.Close()
}
write-output "files: $numFiles"
write-output "user_tables: $numTables"
write-output "total_rows: $totalRows"

Access文件有表(带记录),而不是行。A每个Access文件只有一个带记录的表。另外,为了明确术语,当您使用导入CSV时,文件肯定会被打开。我的意思是,不用我打开它。我相信你知道我想要什么。如果我能找到解决这个问题的办法,那就太好了。因为打开每个access文件并在文件中写入行数,最后将行数相加将花费大量时间,这是我的观点。例如,如果它们是一堆CSV文件,所用的时间将与显式打开和读取每个文件所用的时间完全相同。这里面没有魔法。要查看(计数)文件中的内容,请打开文件并查看它。Access DB文件也是如此。您需要使用JET驱动程序和ADODB连接,打开每个数据库并查看它。这是一个很好的答案!非常感谢。即使我已经解决了我的问题,我也会把你的答案标记为接受,因为这是解决问题的好办法
$connStrStub = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
$numFiles = 0
$numTables = 0
$totalRows = 0
foreach ($f in Get-ChildItem -Path C:\Users\Public\test\*.accdb)
{
    $numFiles++
    $conn = New-Object System.Data.OleDb.OleDbConnection ($connStrStub + $f.FullName)
    $conn.Open()
    $schemaTable = $conn.GetSchema("TABLES")
    foreach ($dtRow in $schemaTable)
    {
        $tblName = $dtRow["TABLE_NAME"]
        if (!$tblName.StartsWith("MSys"))
        {
            $numTables++
            $cmd = New-Object System.Data.OleDb.OleDbCommand "SELECT COUNT(*) AS n FROM [$tblName]", $conn
            $totalRows += $cmd.ExecuteScalar()
        }
    }
    $conn.Close()
}
write-output "files: $numFiles"
write-output "user_tables: $numTables"
write-output "total_rows: $totalRows"