Сценарий командной строки Windows для переименования папки в текущий месяц -3 (например, с 2009-04 по 2009-01) - PullRequest
3 голосов
/ 11 июня 2009

Что будет сценарий командной строки Windows для переименования папки с текущего месяца до текущего месяца - 3, используя формат YYYY-MM?

например:.

c:\myfiles\myFolder\

должно стать:

c:\myfiles\2009-01\

Ответы [ 4 ]

4 голосов
/ 11 июня 2009

Для моего региона мне нужно что-то другое.

Также, я полагаю, вам нужно иметь дело с однозначными месяцами.

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
2 голосов
/ 11 июня 2009

Вам, к сожалению, придется самостоятельно разбирать содержимое %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 голосов
/ 11 июня 2009

Версия ответа на вопрос для формата даты в Великобритании (ДД-ММ-ГГГГ):

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
0 голосов
/ 11 июня 2009

рен * -04 * -01

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...