创建文本文件时批处理文件运行缓慢

时间:2018-03-08 21:40:51

标签: batch-file cmd vbscript

我有一个批处理文件,可以将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%,然后该文件在创建最终文件时跳过第一行。我错过了一些减缓这种情况的东西吗?或者有更好的方法来实现这一目标吗?该脚本的每个其他部分都以我期望的速度运行。

2 个答案:

答案 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.因此,这对于阅读大文件也应该有用。