【发布时间】:2016-04-27 17:05:57
【问题描述】:
您能否帮助找到一个可以解决以下需求的 Windows 解决方案?
目前我在 Notepad++ 中使用正则表达式手动执行此操作,但此例程将由多个人使用,自动方式会更好。
我有一个巨大的文本文件,其中包含将在 SQL Server 中加载的插入语句。
我要做的是:
1 - 插入 BEGIN TRANSACTION;在文件的开头
2 - 插入 COMMIT TRANSACTION;在文件的末尾
3 - 在每 1000 行之后插入 3 个带有文本的新行:
提交交易;
去
开始交易;
4 - 将前 3 行从另一个文件复制到当前文件
这件事会发生在动态路径中。
这是一个包含 5000 行的文件的示例:
输入
Line_No 文字
1 插入...
500 插入...
1000 插入...
1001 插入...
2000 插入...
2001年插入...
5000 插入...
所需的输出
Line_No 文字
第一行包含来自同一路径中其他文件的文本
第二行包含来自同一路径中其他文件的文本
第三行包含来自同一路径中其他文件的文本
开始交易;
1 插入...
500 插入...
1000 插入...
1001 提交交易;
1002 出发
1003 开始交易;
1004 插入...
2000 插入...
2001 年承诺交易;
2002 出发
2003 开始交易;
2004年插入...
5000 插入...
5001 提交交易;
非常感谢! :)
更新: 这是使用@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 :-) !
【问题讨论】:
-
这不是一个问题,而是一个任务请求。请自行尝试,分享您的努力并准确描述您遇到的问题,包括您的代码应该做什么以及它实际上做了什么。
-
你说你已经可以用正则表达式做到这一点......在PowerShell中你可以使用
$text -replace 'regexpattern', 'newvalue'来替换使用正则表达式。我个人会使用某种类型的循环和计数器。 -
也不清楚你所说的“动态路径”到底是什么意思,也不清楚在第 4 步中选择什么文件(将前 3 行从另一个文件复制到当前文件)......
标签: powershell batch-file vbscript cmd sqlcmd