将文件夹重命名为当前月份-3的Windows命令行脚本(例如,将2009-04重命名为2009-01)

3

如何使用Windows命令行脚本将一个文件夹从当前月份重命名为当前月份减3个月,格式为YYYY-MM?

例如:

c:\myfiles\myFolder\

should become:

c:\myfiles\2009-01\
4个回答

4

针对我的本地化需求,我需要一些不同的东西。

此外,您需要处理单数字月份,我想。

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

非常感谢!我只是需要调整一下日期格式,以符合英国的标准(我应该在问题中提到这一点)。我也会发布你回答的英国版本。此外,我还需要将%1定义为源文件夹。 - Techboy

2

很不幸,你需要自己解析%DATE%的内容。在cmd中没有本地化安全的日期/时间操作工具。

对于我的语言环境(使用标准的ISO 8601日期格式),我可以使用以下命令:

@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%"

然而,根据使用的日期格式,它可能会略有不同。

0

ren *-04 *-01


没错(我已经给了+1)。虽然我在问题上犯了一个错误-抱歉!我现在已经更改了问题中的源文件夹名称。 - Techboy

0

针对英国日期格式(DD-MM-YYYY)的回答版本如下:

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:\myfiles\myFolder\ %newFolder%

endlocal

@Sohnee - 你在编辑中做了什么改动吗?对我来说看起来完全一样。 - Techboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接