在powershell中使用Get-Date的变量

时间:2017-04-12 12:23:40

标签: powershell batch-file powershell-v2.0 powershell-v3.0

我在批处理脚本中使用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

4 个答案:

答案 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')"

“,但我不知道它在说什么! ;)