我试图在文件夹中处理SQL文件,重命名它们,如果文件内容以' / **'开头。然后我想从文件内容中删除前三行并覆盖该文件。 下面的代码可以工作,但是当添加其中一个注释掉的行时,它会返回错误消息。
function Get-ScriptDirectory
{
$Invocation = (Get-Variable MyInvocation -Scope 1).Value
Split-Path $Invocation.MyCommand.Path
}
$sqlfolder = Get-ScriptDirectory
$files = Get-ChildItem $sqlfolder\* -Include *.sql
Foreach ($file in $files) {
Write-Output $file.name
$newName = $file.name.Substring($file.name.LastIndexOf(" ")+1)
Rename-Item $file -NewName $newName
get-content $file |
##Where-Object {$_.StartsWith("/**")} |
##Where-Object {$_ -Like "/**"} |
select -Skip 3 |
set-content "$file-temp"
move "$file-temp" $file -Force
}
我想要其中一条注释掉的行,以确保只会从以字符串' / **'开头的文件中删除前三行。
错误讯息:
move : Cannot find path ...-temp' because it does not exist.
... ObjectNotFound ... PathNotFound ...
答案 0 :(得分:1)
我只能使用评论中建议的If
来修改以文本'/ **'开头的文件。这是最终的代码:
function Get-ScriptDirectory
{
$Invocation = (Get-Variable MyInvocation -Scope 1).Value
Split-Path $Invocation.MyCommand.Path
}
$sqlfolder = Get-ScriptDirectory
$files = Get-ChildItem $sqlfolder\* -Include *.sql
Foreach ($file in $files) {
# Write-Output $file.name
$newName = $file.name.Substring($file.name.LastIndexOf(" ")+1)
Rename-Item $file -NewName $newName
$firstLine = (Get-Content $file)[0]
if ($firstLine.StartsWith("/**")){
Get-Content $file |
select -Skip 3 |
set-content "${file}-temp"
move "${file}-temp" $file -Force
}
}