从批处理中将参数传递给 powershell 脚本放置空格
Passing argument to powershell script from batch puts spaces
我正在使用批处理文件 runpowershellscript.bat 来调用 powershell 脚本示例。ps1。当我将参数传递给批处理文件时,批处理将该参数发送给 powershell 脚本。
当我在 sample.ps1 中打印参数时,每个参数周围都有一个 space。为什么要添加 space?
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
样本.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] 之间没有 space。我没想到 Hello 和 firstarg 之间会出现 space。
谢谢。
您使用了错误的串联运算符。通过使用逗号,您将数组而不是字符串传递给 Write-Host
,因此它会在元素之间添加 space。
试试看:
if ($args[0]) {
Write-Host "Hello,$($args[0])"
}
应该可以解决。
我正在使用批处理文件 runpowershellscript.bat 来调用 powershell 脚本示例。ps1。当我将参数传递给批处理文件时,批处理将该参数发送给 powershell 脚本。 当我在 sample.ps1 中打印参数时,每个参数周围都有一个 space。为什么要添加 space?
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
样本.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] 之间没有 space。我没想到 Hello 和 firstarg 之间会出现 space。
谢谢。
您使用了错误的串联运算符。通过使用逗号,您将数组而不是字符串传递给 Write-Host
,因此它会在元素之间添加 space。
试试看:
if ($args[0]) {
Write-Host "Hello,$($args[0])"
}
应该可以解决。