您好,我正在寻找Powershell脚本,该脚本会将目录中的所有csv文件合并到一个文本文件(.txt)中。所有csv文件都具有相同的标头,该标头始终存储在每个文件的第一行中。因此,我需要从第一个文件中获取标头,但在其余文件中,应跳过第一行。我能够找到正好满足我需要的批处理文件,但是我在一个目录中有4000多个csv文件,并且需要花费超过45分钟的时间才能完成工作。
@echo off
ECHO Set working directory
cd /d %~dp0
Deleting existing combined file
del summary.txt
setlocal ENABLEDELAYEDEXPANSION
set cnt=1
for %%i in (*.csv) do (
if !cnt!==1 (
for /f "delims=" %%j in ('type "%%i"') do echo %%j >> summary.txt
) else (
for /f "skip=1 delims=" %%j in ('type "%%i"') do echo %%j >> summary.txt
)
set /a cnt+=1
)
有什么建议如何创建比此批处理代码更有效的powershell脚本?
谢谢你。
约翰
这会将所有文件附加在一起,一次读取一个文件:
get-childItem "YOUR_DIRECTORY\*.txt"
| foreach {[System.IO.File]::AppendAllText
("YOUR_DESTINATION_FILE", [System.IO.File]::ReadAllText($_.FullName))}
# Placed on seperate lines for readability
如果需要,此文件将在每个文件条目的末尾添加新行:
get-childItem "YOUR_DIRECTORY\*.txt" | foreach
{[System.IO.File]::AppendAllText("YOUR_DESTINATION_FILE",
[System.IO.File]::ReadAllText($_.FullName) + [System.Environment]::NewLine)}
跳过第一行:
$getFirstLine = $true
get-childItem "YOUR_DIRECTORY\*.txt" | foreach {
$filePath = $_
$lines = $lines = Get-Content $filePath
$linesToWrite = switch($getFirstLine) {
$true {$lines}
$false {$lines | Select -Skip 1}
}
$getFirstLine = $false
Add-Content "YOUR_DESTINATION_FILE" $linesToWrite
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句