DOS脚本将一个文件读入另一个文件

时间:2011-10-12 12:46:37

标签: batch-file

我发现我无法在托管的sql server db上授予BULKADMIN或SYSADMIN角色,并尝试通过创建包含insert语句的.sql文件来绕过批量插入操作。 insert语句是使用xls宏创建的,所以我现在正在进行一些手动bodyshopping工作。那么让我在这里提出问题。

我有一个包含以下内容的文本文件 -

10/05/2011 01:21 PM 1-16332-1008261.psa 
10/05/2011 01:21 PM 1-16332-1011698.psa 
10/05/2011 01:21 PM 1-16332-1023151.psa 
10/05/2011 01:21 PM 1-16332-1035695.psa 
10/07/2011 03:36 PM 1-16332-1023193.psa 
10/07/2011 03:36 PM 1-16332-1035694.psa 
6 File(s) 8,933,754 
2 Dir(s) 1,675,268,096 free

我想在最终输出文件中实现的是这个 -

insert into xyz.abcd values('10/05/2011', '1-16332-1008261.psa');
insert into xyz.abcd values('10/05/2011', '1-16332-1011698.psa');
insert into xyz.abcd values('10/05/2011', '1-16332-1023151.psa');
insert into xyz.abcd values('10/05/2011', '1-16332-1035695.psa');
insert into xyz.abcd values('10/07/2011', '1-16332-1023193.psa');
insert into xyz.abcd values('10/07/2011', '1-16332-1035694.psa');
go

请注意,输入文本文件中的最后两行将在我的最终输出sql文件中被删除。它现在通过dos脚本自动执行xls宏,其中'insert into xyz.abcd values'被认为是一个常量字符串,在文件的实际日期和文件名被读取之前写入每个新行。 我将我的最终输出文件命名为.sql并从我的计算机远程执行。 如果在DOS编程中可以这样做,有人可以帮助我。

我试图在我试图删除的另一篇文章中提出类似的问题,但我无法这样做。猜猜我没有正确解释另一个。

我知道我可以通过echo命令将字符串作为文字重定向到文件,但挑战是如何从一个文件中读取一行的分数并将它们放入一个新文件中。

谢谢!

1 个答案:

答案 0 :(得分:2)

请将以下代码放入记事本并将其保存为CMD批处理文件(例如Convert2SQLfile.cmd)。然后从命令行运行3个参数,同时:

  • 第一个参数包含将从中读取数据的源文件的路径
  • 第二个参数包含将保存数据的目标文件的路径
  • 第3个参数包含应存储在SQL命令中的表名,而不是您请求中的“xyz.abcd”

希望这有帮助。

的问候,
Standa

    @echo off
    SetLocal

    SET App.SourceFile=%1
    SET App.DestinationFile=%2
    SET App.Table=%3


    FOR /f "usebackq tokens=1,4" %%i IN (`type %%App.SourceFile%%`) DO (
        IF #%%j# NEQ ## (
            IF #%%j# NEQ #free# (
                ECHO insert into %App.Table% values ^('%%i', '%%j'^); >> %App.DestinationFile%
            )
        )
    )

    ECHO go >> %App.DestinationFile%