使用Powershell从文件名查找季度和年度

使用Powershell从文件名查找季度和年度,powershell,batch-file,Powershell,Batch File,编辑的问题 我正在编写一个批处理脚本,其中文件名中包含名称和日期。 所以我在ADATE变量中提取日期 for /D %%d in ("C:\AA\*") do ( for %%a in ("%%d\*.*") do (SET "FPath=%%~dpa" Set "FName=%%~na" ) ) ::echo %FPath%/%FName% ::timeout 4 For /F "Tokens=4-9 Delims=-" %%A In ("%FName%") Do ( Set "Fr

编辑的问题

我正在编写一个批处理脚本,其中文件名中包含名称和日期。 所以我在ADATE变量中提取日期

for /D %%d in ("C:\AA\*") do (
for %%a in ("%%d\*.*") do (SET "FPath=%%~dpa"
Set "FName=%%~na" )
)
::echo %FPath%/%FName%
::timeout 4

For /F "Tokens=4-9 Delims=-" %%A In ("%FName%") Do (
    Set "Freq=%%B"
    Set "ADate=%%F%%E%%D"
)
ADate正在正确填充

Set "DFormat=ddMMyyyy"

For /F UseBackQ %%A In (
    `Powershell "([datetime]::ParseExact('%ADate%','%DFormat%', [System.Globalization.CultureInfo]::CurrentCulture)).AddMonths(-1).ToString('MMM-yyyy')"`
) Do Set "DateF=%%A"
上述逻辑运作良好

但现在我想拿季度而不是月份。 因此,文件夹名称将为2017年第1季度、2017年第2季度等。文件名中的可用日期减去1个季度

谁能告诉我怎么弄到这个吗 我试着不符合逻辑

`Powershell "([datetime]::ParseExact('%ADate%','%DFormat%',[System.Globalization.CultureInfo]::CurrentCulture)).AddQuarter(-1).ToString('M')"`
DateTime结构没有概念,也没有四分之一,但计算起来非常简单-将月份加1,除以3,然后转换为整数,四舍五入将处理其余部分:

$DateTime = [datetime]::ParseExact('01042017','ddMMyyyy',[System.Globalization.CultureInfo]::CurrentCulture)
$Quarter = [int](($dateTime.Month + 1) / 3)
使用并包装成一批

:: Q:\Test\2017\09\20\SO_46323005.cmd
@Echo off
For /F "Delims=" %%A in (
    'powershell -nop -c "\"Q{0}-{1}\" -f [Math]::ceiling((Get-date -f MM)/3), $(Get-date -f yyyy) "'
) Do Set "Folder=%%A"
Set Folder
Goto :Eof
样本输出

> SO_46323005.cmd
Folder=Q3-2017

谢谢你的回复。但我猜这个逻辑在系统日期上起作用。但在我的例子中,我必须使用文件名中的日期,还需要从中减去1/4。编辑问题请阅读一次。@标记-标记的链接有点不同,这里我使用的是来自文件名的日期,而不是来自Systemdate的日期。