在 powershell 中使用 Get-Date 的变量 insted
Use Variable insted of Get-Date in powershell
我在批处理脚本中使用 PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')"
。
我想使用变量而不是 Get-Date 函数。可能吗?
ADate
是变量名!
已编辑:
按照提示,我的脚本是:
For /F UseBackQ %%A In (
`PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')"`
) Do Set "Freq=%%A"
Adate
是来自文件名的简单字符串,其值类似于 16112016
.
您需要使用 for
循环在批处理变量中获取外部命令的输出:
@echo off
for /f "usebackq tokens=*" %%d in (`powershell "..."`) do set "adate=%%d"
echo %adate%
usebackq
和反引号只是为了让您无需转义命令字符串中的嵌套单引号。
以下从已知文件的属性中获取最后修改时间,并创建一个日期早 7 天的变量,(显然根据需要更改 C:\Test\TestFile.ext
):
For /F UseBackQ %%A In (
`PowerShell "((gi 'C:\Test\TestFile.ext').LastWriteTime).AddDays(-7).ToString('ddMMyyyy')"`
) Do Set "ADate=%%A"
编辑
以下示例采用已知格式的日期字符串,(在本例中以两个变量提供)。然后将该字符串转换为日期对象,减去 7 天并将其设置回新 %ADate%
变量中的字符串:
@Echo Off
Set "DateStr=16112016"
Set "DFormat=ddMMyyyy"
For /F UseBackQ %%A In (`Powershell^
"([datetime]::ParseExact('%DateStr%','%DFormat%', [System.Globalization.CultureInfo]::CurrentCulture)).AddDays(-7).ToString('%DFormat%')"
`) Do Set "ADate=%%A"
Echo(%ADate%
Timeout -1
您可以将 powerShell 命令的输出存储到一个文件中,然后在删除该临时文件后读取该文件。
PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')" >temp.txt
set /p myVarDate= < date_Shell.txt
echo Date from Shell %myVarDate%
del temp.txt
好的。我拿到我的 crystal 球并问它:"What is the solution here?",它回答说:“改变
PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')"
来自
PowerShell "(Get-Date -Date '!Adate:~4!-!Adate:~2,2!-!Adate:~0,2!').AddDays(-7).ToString('ddMMyyyy')"
”,但我不知道它在说什么!;)
我在批处理脚本中使用 PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')"
。
我想使用变量而不是 Get-Date 函数。可能吗?
ADate
是变量名!
已编辑:
按照提示,我的脚本是:
For /F UseBackQ %%A In (
`PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')"`
) Do Set "Freq=%%A"
Adate
是来自文件名的简单字符串,其值类似于 16112016
.
您需要使用 for
循环在批处理变量中获取外部命令的输出:
@echo off
for /f "usebackq tokens=*" %%d in (`powershell "..."`) do set "adate=%%d"
echo %adate%
usebackq
和反引号只是为了让您无需转义命令字符串中的嵌套单引号。
以下从已知文件的属性中获取最后修改时间,并创建一个日期早 7 天的变量,(显然根据需要更改 C:\Test\TestFile.ext
):
For /F UseBackQ %%A In (
`PowerShell "((gi 'C:\Test\TestFile.ext').LastWriteTime).AddDays(-7).ToString('ddMMyyyy')"`
) Do Set "ADate=%%A"
编辑
以下示例采用已知格式的日期字符串,(在本例中以两个变量提供)。然后将该字符串转换为日期对象,减去 7 天并将其设置回新 %ADate%
变量中的字符串:
@Echo Off
Set "DateStr=16112016"
Set "DFormat=ddMMyyyy"
For /F UseBackQ %%A In (`Powershell^
"([datetime]::ParseExact('%DateStr%','%DFormat%', [System.Globalization.CultureInfo]::CurrentCulture)).AddDays(-7).ToString('%DFormat%')"
`) Do Set "ADate=%%A"
Echo(%ADate%
Timeout -1
您可以将 powerShell 命令的输出存储到一个文件中,然后在删除该临时文件后读取该文件。
PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')" >temp.txt
set /p myVarDate= < date_Shell.txt
echo Date from Shell %myVarDate%
del temp.txt
好的。我拿到我的 crystal 球并问它:"What is the solution here?",它回答说:“改变
PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')"
来自
PowerShell "(Get-Date -Date '!Adate:~4!-!Adate:~2,2!-!Adate:~0,2!').AddDays(-7).ToString('ddMMyyyy')"
”,但我不知道它在说什么!;)