在用户选择之后将多个组合成一个

时间:2017-09-15 08:36:57

标签: powershell cmd

我正在寻找一个powershell脚本,提示用户选择多个文件。确认选择后,我想将所有选定的文件合并到一个文件中。 这是我到目前为止可以管理的内容

Function Get-FileName($initialDirectory)
{
    [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null

    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
    $OpenFileDialog.initialDirectory = $initialDirectory
    $OpenFileDialog.filter = "TXT (*.txt;*.log)| *.txt;*.log"
    $openFileDialog.MultiSelect = $true
    $OpenFileDialog.ShowDialog() | Out-Null
    $OpenFileDialog.FileNames
}
$inputfiles = Get-FileName "C:\temp"
$inputfiles
cmd /c copy /b $inputfiles out.txt

这些文件通常是大文本/日志文件,每个文件中有数百万行,到目前为止,通过cmd复制是我知道组合大文件的最快方式。
当前脚本仅复制$inputfiles中的第一个文件。我怎样才能使这个工作组合所有文件?

1 个答案:

答案 0 :(得分:0)

这是一个如何做到的简单示例。我用out-gridview取代了你的openfiledialog

#Get files and prompt them in Grid-View
$Files = Get-ChildItem -Path 'C:\temp\SC Test' -Recurse -Include *.txt, *.log | Select-Object -Property Name, DirectoryName, FullName | Out-GridView -PassThru -Title "select files to merge"
#path for the new file with the content
$MergedFilePath = "C:\temp\merged.txt"

#Loop selected files from gridview
Foreach($File in $Files){
    #Get text from file and write the text to the new file
    Get-Content -Path $File.FullName | Out-File -FilePath $MergedFilePath -Encoding utf8 -Append
}