我目前生成的bat文件包含多个BTEQ调用,以针对Teradata框执行.btq脚本,下面是一个示例CMD调用:
i
据我所知,语法是:
> 指定输入文件& >> 指定输出文件
我目前正在尝试将bat实现转换为PowerShell版本但是我遇到了以下问题:
bteq <Bteq\"File_1.BTQ" >>bteq_output.txt 2>&1
我的PowerShell脚本中调用的结果是什么:
PS C:\...\Deploy.ps1:21 char:81
+ ... -Object { bteq < (Join-Path $deployDir $_) >> bteq_log.txt }
+ ~
The '<' operator is reserved for future use.
+ CategoryInfo : ParserError: (:) [],ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RedirectionNotSupported
似乎BTEQ命令行语法与PowerShell中的&lt; 运算符直接冲突。
修改 如果我试图逃避&lt;用`然后我会看到以下错误,好像参数没有被选中:
(Get-Content -Path $configFile) | Select-Object -Skip 1 | ForEach-Object { bteq.exe < (Join-Path $deployDir $_) >> bteq_output.txt }
在指定要使用的文件时,是否有人能够了解如何在PowerShell中调用bteq命令?
答案 0 :(得分:1)
尝试cat <your-bteq-file> | bteq
来调用你的bteq文件
答案 1 :(得分:0)
您应该能够将foreach
中的部分包装到脚本块中,PowerShell会将其视为一个命令。您只需要以&
符号开头即可。
foreach { & {bteq.exe < (Join-Path $deployDir $_) >> bteq_output.txt} }
不在机器上进行测试,您可能需要动态地将脚本块构建为字符串,以便从循环中正确解析变量。
答案 2 :(得分:0)
在看到Shailesh发布的答案之前,我设法通过调用cmd来实现它,如下所示:
(Get-Content -Path $configFile)[1..$fileCount] | ForEach-Object {
cmd.exe /C ([String]::Concat(" bteq <", $deployDir, "`\""" , $_ , """ >>output.txt 2>&1"))
if($LASTEXITCODE -ne 0){
Write-Host "Error Code" $LASTEXITCODE
break
} else {
Write-Host "Completed" $_ ": Return code" $LASTEXITCODE
}
};
这里的这组语句迭代从$ configFile变量读取的文本,然后如果错误代码不等于0,则对每个语句调用bteq。