从批处理向powershell脚本传递参数会放置空格

时间:2015-09-18 15:41:56

标签: powershell arguments space

我正在使用批处理文件runpowershellscript.bat来调用powershell脚本sample.ps1。当我将参数传递给批处理文件时,批处理将该参数发送到powershell脚本。 当我在sample.ps1中打印参数时,参数的周围各有一个空格。为什么这个空间会被添加?

runpowershellscript.bat

@echo off

setlocal
SET SCRIPT=%1
SET PATH=%PATH%;C:\Windows\System32\WindowsPowershell\v1.0\

if "%2"=="" (
REM no arguments
powershell -executionpolicy bypass -File %1
goto :END
)

if not "%3"=="" (
REM 2 arguments
powershell -executionpolicy bypass -File %1 %2 %3
goto :END
) 

if not "%2"=="" (
REM 1 argument
powershell -executionpolicy bypass -File %1 %2
goto :END
) 

:END
endlocal

sample.ps1

Write-Host "number of arguments=" $args.Count

for($i = 0; $i -lt $args.Count; $i++) {
    Write-Host "[",$args[$i],"]"
}
Write-Host ""

if ($args[0]) {
Write-Host "Hello,",$args[0]
}
else {
Write-Host "Hello,World"
}

版本的powershell

PS C:\eclipse\batch> Get-Host


Name             : ConsoleHost
Version          : 2.0
InstanceId       : 7b72da6c-5e6c-4c68-9280-39ae8320f57e
UI               : System.Management.Automation.Internal.Host.InternalHostUserI
                   nterface
CurrentCulture   : en-GB
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

下面的命令行内容,当我运行批处理

C:\batch>.\runpowershellscript.bat sample.ps1 firstarg
number of arguments= 1
[ firstarg ]

Hello, firstarg

请注意,ps1脚本中的Hello和$ args [0]之间没有空格。我没想到Hello和firstarg之间有空格。

感谢。

1 个答案:

答案 0 :(得分:1)

您正在使用错误的连接运算符。通过使用逗号,您将数组而不是字符串传递给Write-Host,因此它会在元素之间添加空格。

尝试改为:

if ($args[0]) {
  Write-Host "Hello,$($args[0])"
}

那应该解决它。