从其他文件开始在n行和3行之后插入带有文本的新行--Windows

时间:2016-04-27 17:05:57

标签: powershell batch-file vbscript cmd sqlcmd


您能否帮助找到可以解决以下需求的 Windows 解决方案?

目前我在Notepad ++中使用正则表达式手动执行此操作,但此例程将由多人使用,并且自动方式将更好。

我有一个包含插入语句的大文本文件,它将在SQL Server中加载。
我想做的是:
1 - 插入BEGIN TRANSACTION;在文件的开头
2 - 插入COMMIT TRANSACTION;在文件的结尾处 3 - 每1000行后插入3个包含文字的新行:
        承诺交易;
        GO
        开始交易;
4 - 将前3行从另一个文件复制到当前文件

这件事会发生在动态路径

以下是5000行文件的示例:

输入

Line_No文字
1插入...
500插入...
1000插入...
1001插入...
2000插入...
2001插入...
5000插入...

期望的输出

Line_No文字
第一行包含来自同一路径中其他文件的文本
第二行,同一路径中的其他文件中的文本
带有同一路径中其他文件的文本的第3行
开始交易;
1插入...
500插入...
1000插入...
1001 COMMIT TRANSACTION;
1002 GO
1003 BEGIN TRANSACTION;
1004插入...
2000插入...
2001年的委员会交易;
2002 GO 2003年开始交易;
2004插入...
5000插入...
5001 COMMIT TRANSACTION;

非常感谢! :)

更新: 以下是使用@mjolinor提供的解决方案执行此任务的解决方案:

$cd = Get-Location
$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
$newfile = "$cd\newfile.sql"
$oldfile = "$cd\oldfile.sql"
$string = Get-Content $cd\otherfile.txt

$header = @"
:out $PSScriptRoot\log.txt
USE $string
GO
BEGIN TRANSACTION; 
"@

$insert = @'
COMMIT TRANSACTION; 
GO
BEGIN TRANSACTION; 
'@

$header | Set-Content $newfile
 Get-Content $oldfile -ReadCount 1000 |
   ForEach-Object { $_,$insert | Add-Content $newfile -Force}
 'COMMIT TRANSACTION;' | Add-Content $newfile

谢谢@mjolinor :-)!

1 个答案:

答案 0 :(得分:0)

没有经过广泛测试,但我认为这应该有效:

$newfile = 'c:\somedir\newfilename.txt'
$oldfile = 'c:\somedir\oldfilename.txt'
$otherfile = 'c:\somedir\someotherfilename.txt'

$insert = @'
COMMIT TRANSACTION; 
GO
BEGIN TRANSACTION; 
'@

'BEGIN TRANSACTION' | Set-Content $newfile
 Get-Content $oldfile -ReadCount 1000 |
   ForEach-Object { $_,$insert | Add-Content $newfile }
 Get-Content $otherfile -Head 3 | Add-Content $newfile