我有一个批处理文件,可以将Excel电子表格转换为制表符分隔的文本文件,删除第一行文本(标题),并执行一个SQL Server存储过程,该过程使用BULK INSERT语句将文本文件导入到表
运行时的所有结果都是正确的,但删除第一行文本的部分运行得非常慢。使用大约1500行的测试文件,创建335 KB txt文件大约需要35秒。
cscript ExcelToTxt.vbs %dSourceFilePath% %dTemp%
for /f "skip=1 delims=*" %%a in (%dTemp%) do (
echo %%a >>%dDestinationFilePath%
)
脚本将Excel文件转换为文本文件%dTemp%
,然后该文件在创建最终文件时跳过第一行。我错过了一些减缓这种情况的东西吗?或者有更好的方法来实现这一目标吗?该脚本的每个其他部分都以我期望的速度运行。
答案 0 :(得分:2)
您可以选择两个选项。
1)更改现有代码,使其不会为输出到输出文件的文件的每一行打开和关闭文件句柄。
(for /f "skip=1 delims=" %%a in (%dTemp%) do echo %%a)>%dDestinationFilePath%
2)如果输入文件小于65,000行,请使用MORE
命令。
more +1 %dTemp% >%dDestinationFilePath%
答案 1 :(得分:1)
您可以使用Powershell跳过第一行。
SET "dTemp=thefile.txt"
SET "dDestinationFilePath=zzz.txt"
powershell -NoLogo -NoProfile -Command ^
"Get-Content %dTemp% |" ^
"Select-Object -Skip 1 |" ^
"Set-Content %dDestinationFilePath%"
-ReadCount
的默认Get-Content
现在为1.因此,这对于阅读大文件也应该有用。