【发布时间】:2018-03-08 21:40:50
【问题描述】:
我有一个批处理文件,它将 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%,然后在创建最终文件时跳过该文件的第一行。我是否错过了一些减慢速度的东西?或者我有更好的方法来完成这个吗?该脚本的所有其他部分都运行得与我预期的一样快。
【问题讨论】:
-
添加代码以跳过vbscript的第一行并直接写入目标文件。如果您真的需要速度,请不要使用 VB 或批处理脚本,将其编写为可编译为本机可执行文件的内容,或者查找已经完成您正在尝试做的事情的众多程序之一。
-
你为什么有
delims=*? -
如果它少于 65,000 行,那么使用
MORE命令跳过第一行会快得多。但我原以为可以对您的 SQL 过程进行编程以跳过标题记录。我的数据库人员使用我发送给他们的所有文件来执行此操作。在您当前的代码中,如果您也进行一次重定向,它会更快。(for /f "skip=1 delims=*" %%a in (%dTemp%) do echo %%a)>%dDestinationFilePath% -
我的测试文件很小,但文件可能超过 65,000 行。我认识到有更好的方法可以做到这一点,但我在数据库之外的经验很少,所以这对我来说是进入新的领域。我试图尽量减少目前每天将数据从供应商报告移动到 SQL Server 的手动步骤。我愿意接受其他想法和建议!
标签: batch-file cmd vbscript