我在一个文件夹中有很多oracle表单,我想在powershell脚本中通过frmcmp
命令编译这些表单。
我写了一个跟随
的powershell脚本 $module="module="
get-childitem "C:\forms\fortest" -recurse |
where { $_.extension -eq ".fmb" } |
foreach {
C:\Oracle\Middleware\Oracle_FRHome1\BIN\frmcmp $module $_.FullName userid=xyz/xyz@xyz Output_File=C:\forms\11\common\fmx\$_.BaseName+'.fmx'
}
但是这个不起作用。我是powershell的新手。
但是当我尝试通过命令提示符编译单个表单时,其工作方式如下。
frmcmp module=C:\forms\src\xyz.fmb userid=xyz/xyz@xyz Output_File=C:\forms\11\common\fmx\xyz.fmx
答案 0 :(得分:2)
如果要在PowerShell中的字符串中使用变量,则可以使用不同的选项。首先,如果您想在字符串中使用变量,则始终需要使用"
而不是'
来包装字符串。
$myVariable = "MyPropertyValue"
Write-Host "The variable has the value $MyVariable"
上面的代码会产生输出:
The variable has the value MyPropertyValue
如果要使用变量(或任何表达式)的属性并将其插入到字符串中,则需要将其包装在带有$(expression goes here)
的字符串中,例如
$MyVariable = New-Object PSObject -Property @{ MyPropertyName = 'MyPropertyValue' }
# The following will fail getting the property since it will only consider
# the variable name as code, not the dot or the property name. It will
# therefore ToString the object and append the literal string .MyPropertyName
Write-Host "Failed property value retrieval: $MyVariable.MyPropertyName"
# This will succeed, since it's wrapped as code.
Write-Host "Successful property value retrieval: $($MyVariable.MyPropertyName)"
# You can have any code in those wrappers, for example math.
Write-Host "Maths calculating: 3 * 27 = $( 3 * 27 )"
以上代码将产生以下输出:
Failed property value retrieval: @{MyPropertyName=MyPropertyValue}.MyPropertyName
Successful property value retrieval: MyPropertyValue
Maths calculating: 3 * 27 = 81
我在PowerShell中启动进程时通常会尝试使用Start-Process
cmdlet,因为它使我可以对启动的进程进行额外的控制。这意味着您可以使用类似于以下内容的内容。
Get-ChildItem "C:\forms\fortest" -Filter "*.fmb" -recurse | Foreach {
$FormPath = $_.FullName
$ResultingFileName = $_.BaseName
Start-Process -FilePath "C:\Oracle\Middleware\Oracle_FRHome1\BIN\frmcmp.exe" -ArgumentList "module=$FormPath", "userid=xyz/xyz@xyz", "Output_File=C:\forms\11\common\fmx\$ResultingFileName.fmx"
}
如果要等待编译下一个项目,直到当前编译完成,您还可以将-Wait
参数添加到Start-Process命令。