【发布时间】:2019-11-19 13:31:16
【问题描述】:
我正在尝试将我的批处理文件处理的一些变量传递给 Powershell 脚本。我面临的问题是,首先批处理文件的整个结果出现在命令提示符下,并且我打算传递的变量旁边没有传递给 Powershell 脚本。此外,我必须输出日志文件内容的变量只需将命令发送回屏幕。
我尝试了以下链接,这些链接让我了解了现在的情况:
批处理文件端
set LOG_FILE = "GDGAGnklasj;oks;fk;dkf lkl;"
set oName = Name
set oStart = "%YYYY%%MM%%DD% %TIME%"
set oStatus = 0
set oEnd = "%YYYY%%MM%%DD% %TIME%"
set oDateRan = %YYYY%%MM%%DD%
set oLog =for /f "delims=" %%i in (%LOG_FILE%) do set content=%content% %%i
echo Updating Database >> %LOG_FILE% 2>&1
cmd /S powershell.exe -ExecutionPolicy Bypass -File "C:\Reporting\updateTool.ps1" "%oName%" "%DateRan%" "%oStart%" "%oEnd%" "%oStatus "%oLog%
PowerShell 脚本
param (
[string]$oName
)
"This is $oName"
我的意图是在批处理文件中设置变量,然后将它们发送到 Powershell 进行处理。
【问题讨论】:
-
你有一个基本的批处理错误:你不应该在
set命令中包含除等号之外的任何空格:set oName=Name,因为等号之前的空格(以及等号之后)都包含在变量名(或值)中。set命令的建议形式是用引号将变量及其值括起来:set "oName=Name" -
echo text >> file.ext也会将>>之前的空格 写入文件,所以要么删除它,要么更好地使用>> "file.ext" echo text。而cmd /S command不能工作,它必须是cmd /S /C command或cmd /S /K command;虽然我相信你在这里根本不需要cmd,只需使用powershell ... -File ......
标签: powershell batch-file