我在批处理脚本中使用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
。
答案 0 :(得分:2)
您需要使用for
循环来获取批处理变量中外部命令的输出:
@echo off
for /f "usebackq tokens=*" %%d in (`powershell "..."`) do set "adate=%%d"
echo %adate%
usebackq
和反引号只是让你不需要在命令字符串中转义嵌套的单引号。
答案 1 :(得分:0)
以下内容取自已知文件属性的最后修改时间,并创建一个日期前七天的变量(显然需要更改C:\Test\TestFile.ext
):
For /F UseBackQ %%A In (
`PowerShell "((gi 'C:\Test\TestFile.ext').LastWriteTime).AddDays(-7).ToString('ddMMyyyy')"`
) Do Set "ADate=%%A"
修改强>
以下示例采用具有已知格式的日期字符串(在本例中为两个变量提供)。然后它将该字符串转换为日期对象,减去七天并将其设置回新%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
答案 2 :(得分:0)
您可以将powerShell命令的输出存储到文件中,然后在删除该临时文件后读取该文件。
PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')" >temp.txt
set /p myVarDate= < date_Shell.txt
echo Date from Shell %myVarDate%
del temp.txt
答案 3 :(得分:0)
确定。我得到了我的水晶球,并问道:“这里有什么解决方案?”,它回答说:“改变
PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')"
通过
PowerShell "(Get-Date -Date '!Adate:~4!-!Adate:~2,2!-!Adate:~0,2!').AddDays(-7).ToString('ddMMyyyy')"
“,但我不知道它在说什么! ;)