如何使用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"
}
}
我有一个包含 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"
}
}