开发者

Use bat to start Powershell script

I have a ba开发者_C百科tch file test.bat to start a powershell script:

@pushd "C:\myscripts"
powershell .\test.ps1 arg1 "arg2 with space" arg3
@popd

The script test.ps1 (located at C:\myscripts) is a very simple one like:

# just print out the arguments
Write-Output ("args count: {0}" -f $args.length)
$args

Then I tried to start test.bat. I should get three arguments passed to ps1 but I got the following result:

args count: 5 arg1 arg2 with space arg3

What I expected in the script, args[0] should arg1 and args[1] should be "arg2 with space" and args3[2] be arg3. I cannot understand why the script actually gets 5 arguments.

How can I pass parameters from cmd or batch to powershell as what I expected? Like this:

args count: 3
arg1
arg2 with space
arg3


powershell .\test.ps1 arg1 'arg2 with space' arg3

or

powershell .\test.ps1 arg1 """arg2 with space""" arg3

I think you should try to avoid using double quotes as cmd already uses them too and therefore it's a little hard to predict what exactly PowerShell will get. Remember that this gets passed through two shells and therefore two layers of escaping/quoting.

PowerShell itself doesn't make much of a distinction between single and double quotes. At least in this context the difference is irrelevant.


OK. I think I got it:

@pushd "C:\myscripts"
powershell .\test.ps1 arg1 'arg2 with space' arg3
@popd

single quote char instead of double one. Maybe they mean different thing in PS.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜