2017-04-12 79 views
-4

我在批处理脚本中使用PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')"在PowerShell中使用变量insted Get-Date

我想使用变量而不是Get-Date函数。可能吗?

ADate是变量名!

编辑:

至于建议,我的脚本是:

For /F UseBackQ %%A In (
    `PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')"` 
) Do Set "Freq=%%A" 

Adate是来自文件的名称简单的字符串,并拥有像16112016的值。

+0

你的日期变量的格式是什么?简单字符串? ISO8601字符串?时间戳? –

+0

@RemyGrandin它的字符串“16112016”2016年11月16日 – Ashu

+0

你真的想达到什么目的?根据今天的日期使用硬编码日期而不是计算日期? – vonPryz

回答

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 
+0

此处而不是(Get-Date),我想使用从文件Name中获取值的变量。 – Ashu

+0

我已经更新了我的回答,如果我的假设仍然不正确,请更好地解释您的任务。 – Compo

+0

宾果...!它按预期工作,但我有问题!为什么我们使用“DFormat”,如果我们不使用它? – Ashu

2

您需要使用for循环得到一个外部命令的输出在批处理变量:

@echo off 
for /f "usebackq tokens=*" %%d in (`powershell "..."`) do set "adate=%%d" 
echo %adate% 

usebackq和反引号都只是让你不必为了逃避嵌套单引号你的命令字符串。

+0

该OP编辑了原始问题,并添加了您的所有建议,但没有提供任何关于该问题的评论,所以您的回答现在没有任何意义...... **':/'**(我低估了问题并提出了此答案) – Aacini

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 
0

好的。我得到了我的水晶球,问它:“什么是这里的解决方案”,并说:“更改

PowerShell "(Get-Date).AddDays(-7).ToString('ddMMyyyy')" 

通过

PowerShell "(Get-Date -Date '!Adate:~4!-!Adate:~2,2!-!Adate:~0,2!').AddDays(-7).ToString('ddMMyyyy')" 

”,但我不知道它在说关于! ;)