Нижеприведенный сценарий будет проходить через выбранный вами каталог и создать текстовый файл с именем базового файла + текущий индекс (например, 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"
}
}
Привет, спасибо за это. Еще один вопрос, как я могу преобразовать это в .ps1? (абсолютный начинающий начинающий здесь :) :) – Rafferty
Два способа, скопируйте приведенный выше текст в блокнот и сохраните как '.ps1' или откройте« Powershell ISE », вставьте код и файл -> Сохранить. – Bluecakes
Hi Bluecakes, извините, я не был ясен ... Как я могу параметризовать путь? Я попробовал шаблоны в Интернете о том, как создать функцию, но не удалось. – Rafferty