2017-09-20 40 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" 
) 

に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" 

上記のロジックは正常です。

今、私は月 - 年の代わりに四半期を取得したいと思います。 フォルダ名はQ1-2017、Q2-2017などとなります(ファイル名は1から4分の1になります)

これを取得する方法を教えてください。 私は以下のロジックを試していました。

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

@ Mark-あなたのマークが少し違っていて、ここでは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に取り組んでいると思います。しかし、私の場合、File Nameに存在する日付を使用しなければならないので、そこから1/4を引く必要があります。編集質問一度お読みください。 – Ashu

関連する問題