The*_*ist 8 windows powershell command-line command-line-arguments batch-file
我已经研究了一段时间,但我不明白这是如何工作的。我需要的是:
为什么我需要这个?因为我需要运行一个简单的批处理文件来做一些事情,但我需要只能在 PowerShell 中工作的高级功能。具体来说:我需要SaveFileDialog一些应用程序。
以下是我现在所拥有的,在那里我剥离了SaveFileDialog.
<# :
@echo off
setlocal
powershell -noprofile "iex (${%~f0} | out-string)"
goto :EOF
#>
Write-Host "Hello, I'm PowerShell!"
Run Code Online (Sandbox Code Playgroud)
如果我把所有这些都放在一个批处理文件中,比如说,myfile.bat. 它运行并调用 PowerShell 并写入该消息。
我的问题/请求:如何运行myfile.bat param1 param2 param3,并将这些参数/参数传递给我的 PowerShell 脚本?我真的很感激一个最小的例子,它只是通过 powershell 的write-host.
请随时询问更多详情。谢谢!
您也许可以使用类似下面的方法,因为我能够使用该语法获取批处理脚本以将参数传递给 PS 脚本。
它确实必须在顶部构建一个动态 PS 脚本(例程:DynamicPSScriptBuild),如果它已经存在,它将删除它,并且一旦处理完所有执行,它也会删除它。
我必须使用 PS-file而不是-iex(PS1 文件需要存在的原因及其动态构建),但当我测试它将适用的参数一一传递给脚本时,它按预期工作,每个参数都是一次 PS 脚本执行迭代。
我不确定您是否需要将所有参数一个接一个地传递给 PS 脚本,或者一次全部传递,或者您的 PS 脚本逻辑如何处理在同一次执行期间传递给它的多个参数,但这也许会给您带来好处足够的细节来进行相应的调整。
以下脚本的部分FOR %%A IN ("Hello I'm PowerShell!", "Goodbye I'm Leaving", "Come with it and get some more"将是您将每个字符串用作参数的部分,以便在每次执行迭代时一个接一个地传递给 PS 脚本,其中每个字符串值都位于双引号中并以逗号分隔。
(您可能想要转动@ECHO OFF并取出pause命令,因为我使用这些命令来帮助显示每次迭代的所有内容,以确认所有内容均按预期工作)
<# :
@ECHO ON
SETLOCAL
:DynamicPSScriptBuild
SET PSScript=%~f0.ps1
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
ECHO param($a) >>"%PSScript%"
ECHO Write-Host "$a" >>"%PSScript%"
:SetPSScriptArguments
FOR %%A IN ( "Hello I'm PowerShell!",
"Goodbye I'm Leaving",
"Come with it and get some more"
) DO CALL :Powershell "%%~A"
IF EXIST "%PSScript%" DEL /Q /F "%PSScript%"
GOTO :EOF
:PowerShell
PowerShell -NoProfile -ExecutionPolicy Bypass -file "%PSScript%" "%~1"
pause
GOTO :EOF
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24639 次 |
| 最近记录: |