查找季度&使用Powershell从文件名创建年份

时间:2017-09-20 13:11:19

标签: 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 "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"

以上逻辑工作正常。

但现在我想获取Quarter而不是Month-Year。 所以文件夹名称将是Q1-2017,Q2-2017等。(文件名中的日期减去1季度)

有人可以告诉我如何获得这个 我试着低于逻辑。

`Powershell "([datetime]::ParseExact('%ADate%','%DFormat%',[System.Globalization.CultureInfo]::CurrentCulture)).AddQuarter(-1).ToString('M')"`

2 个答案:

答案 0 :(得分:1)

DateTime结构没有概念或“季度”,但它很容易计算 - 将1添加到月份,除以3,然后转换为整数,舍入将保持谨慎其余的:

$DateTime = [datetime]::ParseExact('01042017','ddMMyyyy',[System.Globalization.CultureInfo]::CurrentCulture)
$Quarter = [int](($dateTime.Month + 1) / 3)

答案 1 :(得分:0)

使用-f operator并以批量包装

:: 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