使用powershell批量设置变量
Setting a variable in batch using powershell
我绞尽脑汁想弄清楚这个问题。
此代码
@echo off
powershell $Yesterday = (get-date((get-date).addDays(-1)) -format yyyyMMdd)
echo %Yesterday%
::neither one of these echo anything
@echo off
powershell Set-Variable -Name "Yesterday" -Value (get-date((get-date).addDays(-1)) -format yyyyMMdd)
echo %Yesterday%
都应该 return 回复昨天的日期(格式为 yyyMMdd),但是,他们没有。使用 powershell,以下代码确实有效并且 return 正确响应:
$Yesterday = (get-date((get-date).addDays(-1)) -format yyyyMMdd)
Write-Host $Yesterday
::Both of these work in powershell
Set-Variable -Name "Yesterday" -Value (get-date((get-date).addDays(-1)) -format yyyyMMdd)
Write-Host $Yesterday
但是批量使用时无效。任何想法为什么?我正在尝试设置变量 %Yesterday%
以便稍后在脚本中使用它,但它的行为并不像我预期的那样。我敢肯定它很简单,但我现在不明白它是什么。
similar question
批量定义变量,从Powershell检索
@echo off
%Yesterday% = powershell -command (get-date((get-date).addDays(-1)) -format yyyyMMdd)
echo %Yesterday%
pause
这是您应该用作使用 Powershell
和 Batch
设置变量的代码
@echo off & color 0A
Title Setting a variable in batch using powershell
Set psCmd="get-date((get-date).addDays(-1)) -format yyyyMMdd"
Call :RunPS %psCmd% YesterDay
Echo YesterDay was %YesterDay%
pause & Exit
::----------------------------------------------------------------------
:RunPS <PassPSCMD> <Return value to be set as variable>
for /F "usebackq tokens=*" %%i in (`Powershell %1`) do set "%2=%%i"
Goto:eof
:: End of :RunPS function
::----------------------------------------------------------------------
这是一个单行代码,它将在您的批处理脚本中为昨天的日期提供一个变量。第二行清理用于创建变量的临时文件。
powershell -command "((Get-date).AddDays(-1)).ToString('yyyyMMdd')">captureVar && set /p Yesterday=<captureVar
if exist captureVar del captureVar
第 1 行开始时指示 cmd 行对双引号中包含的命令使用 PowerShell。
powershell -command "the powershell command(s)"
顾名思义,第一个 PowerShell cmdlet 将执行 Get-Date 的功能。然后,AddDays 用于从当前值更改日期。负数会减去,正数会加。
默认格式类似于 Friday, December 20, 2019 6:18:29 PM
要更改格式,必须将日期更改为带有格式说明的字符串
.ToString('dddd MM/dd/yyyy HH:mm:ss.ffff K')
PowerShell 命令的输出被重定向到名为 captureVar 的文件中。另一种选择是让 PowerShell 将其写入文件。
powershell -command "((Get-date).AddDays(-1)).ToString('yyyyMMdd') | set-content 'captureVar'" && set /p Today=<captureVar
我用 && 使它成为一个衬垫。但是您可以在将值写入文件后随时设置 var。
set /p Today=<captureVar
下一行清理用于帮助创建变量的临时文件。
我绞尽脑汁想弄清楚这个问题。
此代码
@echo off
powershell $Yesterday = (get-date((get-date).addDays(-1)) -format yyyyMMdd)
echo %Yesterday%
::neither one of these echo anything
@echo off
powershell Set-Variable -Name "Yesterday" -Value (get-date((get-date).addDays(-1)) -format yyyyMMdd)
echo %Yesterday%
都应该 return 回复昨天的日期(格式为 yyyMMdd),但是,他们没有。使用 powershell,以下代码确实有效并且 return 正确响应:
$Yesterday = (get-date((get-date).addDays(-1)) -format yyyyMMdd)
Write-Host $Yesterday
::Both of these work in powershell
Set-Variable -Name "Yesterday" -Value (get-date((get-date).addDays(-1)) -format yyyyMMdd)
Write-Host $Yesterday
但是批量使用时无效。任何想法为什么?我正在尝试设置变量 %Yesterday%
以便稍后在脚本中使用它,但它的行为并不像我预期的那样。我敢肯定它很简单,但我现在不明白它是什么。
similar question
批量定义变量,从Powershell检索
@echo off
%Yesterday% = powershell -command (get-date((get-date).addDays(-1)) -format yyyyMMdd)
echo %Yesterday%
pause
这是您应该用作使用 Powershell
和 Batch
@echo off & color 0A
Title Setting a variable in batch using powershell
Set psCmd="get-date((get-date).addDays(-1)) -format yyyyMMdd"
Call :RunPS %psCmd% YesterDay
Echo YesterDay was %YesterDay%
pause & Exit
::----------------------------------------------------------------------
:RunPS <PassPSCMD> <Return value to be set as variable>
for /F "usebackq tokens=*" %%i in (`Powershell %1`) do set "%2=%%i"
Goto:eof
:: End of :RunPS function
::----------------------------------------------------------------------
这是一个单行代码,它将在您的批处理脚本中为昨天的日期提供一个变量。第二行清理用于创建变量的临时文件。
powershell -command "((Get-date).AddDays(-1)).ToString('yyyyMMdd')">captureVar && set /p Yesterday=<captureVar
if exist captureVar del captureVar
第 1 行开始时指示 cmd 行对双引号中包含的命令使用 PowerShell。
powershell -command "the powershell command(s)"
顾名思义,第一个 PowerShell cmdlet 将执行 Get-Date 的功能。然后,AddDays 用于从当前值更改日期。负数会减去,正数会加。
默认格式类似于 Friday, December 20, 2019 6:18:29 PM
要更改格式,必须将日期更改为带有格式说明的字符串
.ToString('dddd MM/dd/yyyy HH:mm:ss.ffff K')
PowerShell 命令的输出被重定向到名为 captureVar 的文件中。另一种选择是让 PowerShell 将其写入文件。
powershell -command "((Get-date).AddDays(-1)).ToString('yyyyMMdd') | set-content 'captureVar'" && set /p Today=<captureVar
我用 && 使它成为一个衬垫。但是您可以在将值写入文件后随时设置 var。
set /p Today=<captureVar
下一行清理用于帮助创建变量的临时文件。