如何使用powershell将多个大文本文件拆分成多个文件

How to split multiple big text files into multiple files using powershell

我有一个包含 1 个或多个这样的文件的文件夹:

bigfileA.txt
bigfileB.txt
bigfileC.txt

每个文件包含 1 行并由 ' 分隔 例如,bigfileA.txt 可能包含 abcdef'ghijklmnop'qrst

如何使用powershell 以便当我运行 .ps 文件时它会自动将指定目录中的所有文件拆分为多个文件? 输出将如下所示:

bigfileA1.txt --> abcdef
bigfileA2.txt --> ghijklmnop
bigfileA3.txt --> qrst
bigfileB1.txt --> uvw
bigfileB2.txt --> xyz
bigfileC1.txt --> ... and so on...
... and so on...

有人可以帮忙吗?提前致谢!

下面的脚本将遍历您选择的目录并创建一个文本文件,其中包含基本文件的名称 + 当前索引(例如 bigfileA + 1)并将具有里面的定界值。

$bigfiles = Get-ChildItem -Path 'C:\path\to\bigfiles\here'

ForEach ($path in $bigfiles)
{
    $contents = Get-Content $path.FullName

    ForEach ($line in $contents)
    {
        $splitItems = $line.split("'")

        For ($i = 0; $i -lt $splitItems.count; $i++)
        {
            New-Item -Path "$($path.Directory)$($path.BaseName)$i.txt" -ItemType File -Value $splitItems[$i]
        }
    }
}

编辑:重新阅读问题,一定是第一次误解了。更新代码。

如果您希望文件从 1 而不是 0 开始,请更改此行

New-Item -Path "$($path.Directory)$($path.BaseName)$i.txt" -ItemType File -Value $splitItems[$i]

至此

New-Item -Path "$($path.Directory)$($path.BaseName)$($i+1).txt" -ItemType File -Value $splitItems[$i]

我们只是将 $i 更改为 $($i+1)

功能编辑

还没有经过测试,因为我在工作所以很快就组装好了,但这至少是一个开始:)

function Split-BigFiles
{
    [CmdletBinding(DefaultParameterSetName='All', 
                  SupportsShouldProcess=$false, 
                  PositionalBinding=$false)]
    Param
    (
        # Paths to bigfiles
        [Parameter(Mandatory=$false, 
                   ValueFromPipeline=$true,
                   ValueFromPipelineByPropertyName=$false, 
                   ValueFromRemainingArguments=$false, 
                   Position=0,
                   ParameterSetName='All')]
        [ValidateScript({Test-Path $_ -PathType Container})]
        [ValidateNotNullOrEmpty()]
        [String[]]
        $Path
    )

    Begin
    {
        Write-Verbose "Starting Function Split-BigFiles"
    }
    Process
    {
        ForEach($folder in $Path)
        {
            Try
            {
                $bigfiles = Get-ChildItem -Path $folder -ErrorAction Stop
            }
            Catch
            {
                Write-Warning "Oh no i couldn't get the folder! This is the error i got $($_.Exception.Message)"
            }

            if ($bigfiles)
            {
                ForEach ($path in $bigfiles)
                {
                    $contents = Get-Content $path.FullName

                    ForEach ($line in $contents)
                    {
                        $splitItems = $line.split("'")

                        For ($i = 0; $i -lt $splitItems.count; $i++)
                        {
                            New-Item -Path "$($path.Directory)$($path.BaseName)$i.txt" -ItemType File -Value $splitItems[$i]
                        }
                    }
                }
            }
        }
    }
    End
    {
        Write-Verbose "Exiting Function Split-BigFiles"
    }
}