下面是我的电源shell脚本中我调用批处理文件(带参数)的行,我得到位置参数错误。
有人可以请求如何使用powershell脚本中的参数调用批处理文件以及如何从批处理文件中捕获该输入参数。感谢
在我的Power shell脚本中输入:
Start-Process“cmd.exe”“/ c D:\ load.bat”“$ Password”
--Error:
**PS D:\Oracle\Scripts\Obi> .\XYZ.ps1
Start-Process : **A positional parameter cannot be found that accepts argument 'password'.**
At D:\.ps1:4 char:1
+ Start-Process "cmd.exe" "/c D:\load.bat" "$Password"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand**
批处理文件中的脚本(load.bat):
set "Var=%1"
for %%i in (*.csv) do (
sqlldr USERID=userid/%Var%@server:prot/domain, CONTROL=control.ctl, LOG=logfile.log,ERRORS=9999 data='%%i' direct='true'
move %%i D:\backup
)
答案 0 :(得分:1)
要从PowerShell提示符运行批处理文件(Enter
shell脚本),只需键入批处理文件的名称,然后键入其参数,然后按cmd.exe
。请记住:PowerShell是一个shell,这意味着它运行您键入的命令,就像D:\load.bat [param1 [param2 [...]]
一样。例如:
cmd.exe
与&
的一个区别是,如果要运行的命令包含空格,请将命令括在引号中并使用& "D:\Script Tools\load.bat" [param1 [param2 [...]]
(调用或调用)运算符调用它。例如:
cmd.exe
就像在[whamlet|<h1>#{theText}|]
中一样,如果参数包含空格,请不要忘记引用它。
答案 1 :(得分:0)
您应该可以运行:
D:\load.bat "$Password"
或者:
cmd.exe /c D:\load.bat "$Password"
但是,你也应该能够运行:
Start-Process -FilePath 'C:\Windows\System32\cmd.exe' -ArgumentList '/c', 'D:\load.bat', "$Password"
请注意,/c
和'D:\load.bat'
被视为单独的参数。
Start-Process
)或强制PowerShell等待脚本完成(-WindowStyle Hidden
), -Wait
会很有用。如果需要从批处理文件返回的值,则可能需要-PassThru
参数。
答案 2 :(得分:0)
如有疑问,请阅读并关注Start-Process
documentation。
start-process cmd.exe -ArgumentList "/c", "D:\load.bat", "$password"
以上假设$password
变量不包含 cmd
有毒字符(请参阅Redirection)
& Ampersand
< Less-Than Sign
> Greater-Than Sign
| Vertical Line