Windows Command Line Script til at omdøbe en mappe til den aktuelle måned -3 (fx 2009-04 til 2009-01)

Indlæg af Hanne Mølgaard Plasc

Problem



Hvad ville Windows-kommandolinjeskriptet være at omdøbe en mappe fra den aktuelle måned til den aktuelle måned - 3 ved hjælp af formatet ÅÅÅÅ-MM?


f.eks.:


c:myfilesmyFolder


bør blive:


c:myfiles2009-01

Bedste reference


For min lokalitet har jeg brug for noget andet.


Også du skal håndtere encifrede måneder, formoder jeg.


setlocal
@REM example:  Thu 06-11-2009
set stamp=\%DATE\%

@REM get the year
set year=\%stamp:~10,4\%
@REM example: 2009

@REM get the month
set month=\%stamp:~4,2\%
@REM example:  06

@REM subtract 3 months
set /a month=\%month\%-3
@REM example:  3

@REM test if negative (we rolled back beyond January 1st)
if \%month\% LSS 1  (
  set /a month=\%month\%+12
  @REM example: 8
  set /a year=\%year\%-1
  @REM example: 2008
)

@REM prepend with zero for single-digit month numbers
set month=0\%month\%

@REM take last 2 digits of THAT
set month=\%month:~-2\%

set newFolder=\%year\%-\%month\%

@REM move \%1 \%newFolder\%
endlocal

Andre referencer 1


Du bliver nødt til at dissekere indholdet af \%DATE\% selv, desværre. Der er ingen lokaliserings-sikre dato/tidsmanipuleringsfaciliteter i cmd.


For min lokalitet (som bruger standard ISO 8601 datoformat) kunne jeg bare bruge følgende:


@echo off
rem \%DATE\% comes back in ISO 8601 format here, that is, YYYY-MM-DD
set Y=\%DATE:~0,4\%
set /a M=\%DATE:~5,2\% - 3
if \%M\% LSS 1 (
    set /a Y-=1
    set /a M+=12
)
ren myFolder "\%Y\%-\%M\%"


Men afhængigt af det datoformat du bruger, kan det se lidt anderledes ud.

Andre referencer 2


ren * -04 * -01

Andre referencer 3


Versionen af ​​det besvarede spørgsmål for UK-datoformat (DD-MM-ÅÅÅÅ) er:


setlocal

@REM example:  11-06-2009
set stamp=\%DATE\%
@REM get the year

set year=\%stamp:~6,4\%
@REM example: 2009
@REM get the month

set month=\%stamp:~3,2\%
@REM example:  06

@REM subtract 3 months
set /a month=\%month\%-3
@REM example:  3

@REM test if negative (we rolled back beyond 1st January)
if \%month\% LSS 1  (
  set /a month=\%month\%+12
  @REM example: 8

  set /a year=\%year\%-1
  @REM example: 2008
)

@REM prepend with zero for single-digit month numbers
set month=0\%month\%

@REM take last 2 digits of THAT
set month=\%month:~-2\%

set newFolder=\%year\%-\%month\%

move c:myfilesmyFolder \%newFolder\%

endlocal