2017-09-20 75 views
0

已編輯的問題。使用Powershell從文件名查找季度和年份

我正在寫一個批處理腳本,其中一個文件包含文件名中的名稱和日期。 所以我在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" 
) 

A日期是否正確填充提取日期。

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" 

上面的邏輯工作正常。

但現在我想要取季而不是月 - 年。 所以文件夾的名稱將Q1-2017,Q2-2017等(文件名減去1季度的日期)

有人可以告訴我如何得到這個 我試圖低於邏輯。

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

@標記 - 您標記的鏈接有點不同,這裏我使用的日期來自文件名不是來自Systemdate。 – Ashu

回答

1

DateTime結構有沒有概念或「季度」,但它是很容易計算 - 3添加1到一個月,分,然後轉換爲整數,四捨五入將剩下的工作:

$DateTime = [datetime]::ParseExact('01042017','ddMMyyyy',[System.Globalization.CultureInfo]::CurrentCulture) 
$Quarter = [int](($dateTime.Month + 1)/3) 
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 
+0

感謝您的回覆。但我想這個邏輯在System Date上工作。但在我的情況下,我必須使用文件名中的日期還需要從中減去1個季度。編輯問題請閱讀一次。 – Ashu