Пробовал сам создать батник, вышла жуткокодинка.
Помогите написать скрипт, задача которого создавать новую папку с вчерашней датой в названии.
Можно, с любым названием, котороезадаётся в коде.
Другие языки программирования и технологии
Как скриптом создать папку с вчерашней датой?
Я так понял, что язык скрипта не принципиален?
Если так то вот vbs скрипт
Set FSO = CreateObject("Scripting.FileSystemObject")
Const SubDir = "C:\"
NameF = SubDir & CStr(Date() - 1) & "\"
if (Not FSO.FolderExists(NameF)) Then
FSO.CreateFolder(NameF)
End If
Если так то вот vbs скрипт
Set FSO = CreateObject("Scripting.FileSystemObject")
Const SubDir = "C:\"
NameF = SubDir & CStr(Date() - 1) & "\"
if (Not FSO.FolderExists(NameF)) Then
FSO.CreateFolder(NameF)
End If
::Get yesterday's date
@ECHO OFF
:: Keep variables local
SETLOCAL
:: Export registry's date format settings to a temporary file
START /W REGEDIT /E C:\_TEMP.REG "HKEY_CURRENT_USER\Control Panel\International"
:: Read the exported data
FOR /F "tokens=1* delims==" %%A IN ('TYPE C:\_TEMP.REG ^| FIND /I "iDate"') DO SET iDate=%%B
FOR /F "tokens=1* delims==" %%A IN ('TYPE C:\_TEMP.REG ^| FIND /I "sDate"') DO SET sDate=%%B
DEL C:\_TEMP.REG
:: Remove quotes from exported values
SET iDate=%iDate:"=%
SET sDate=%sDate:"=%
:: Parse today's date depending on registry's date format settings
IF %iDate%==0 FOR /F "TOKENS=1-4* DELIMS=%sDate%" %%A IN ('DATE/T') DO (
SET Year=%%C
SET Month=%%A
SET Day=%%B
)
IF %iDate%==1 FOR /F "TOKENS=1-4* DELIMS=%sDate%" %%A IN ('DATE/T') DO (
SET Year=%%C
SET Month=%%B
SET Day=%%A
)
IF %iDate%==2 FOR /F "TOKENS=1-4* DELIMS=%sDate%" %%A IN ('DATE/T') DO (
SET Year=%%A
SET Month=%%B
SET Day=%%C
)
:: Remove the day of week if applicable
FOR %%A IN (%Year%) DO SET Year=%%A
FOR %%A IN (%Month%) DO SET Month=%%A
FOR %%A IN (Ъy%) DO SET Day=%%A
:: Today's date in YYYYMMDD format
SET SortDate=%Year%%Month%Ъy%
:: Strip leading zero from Day
SET DayS=Ъy%
IF Ъy:~0,1%==0 SET DayS=Ъy:~1%
:: Calculate yesterday's date
IF ЪyS% EQU 1 (
SET YesterY=%Year%
CALL :RollMonth
) ELSE (
SET /A YesterD=ЪyS% - 1
SET YesterM=%Month%
SET YesterY=%Year%
)
:: Add leading zero to YesterD if necessary
IF %YesterD% LSS 10 SET YesterD=0%YesterD%
:: Yesterday's date in YYYYMMDD format
SET SortYest=%YesterY%%YesterM%%YesterD%
:: Done
GOTO:RENAMENOW
:: * * * * * * * * Subroutines * * * * * * * *
:: Subroutine to get yesterday's date if today is the first day of the month
:: Thanks for Aaron M. Jones who pointed out an error in the YesterD value for Month 2
:RollMonth
IF %Month%==01 (
SET YesterD=31
SET YesterM=12
SET /A YesterY = %Year% - 1
)
IF %Month%==02 (
SET YesterD=31
SET YesterM=01
)
IF %Month%==03 (
SET YesterD=28
SET YesterM=02
CALL :LeapYear
)
IF %Month%==04 (
SET YesterD=31
SET YesterM=03
)
IF %Month%==05 (
SET YesterD=30
SET YesterM=04
)
IF %Month%==06 (
SET YesterD=31
SET YesterM=05
)
IF %Month%==07 (
SET YesterD=30
SET YesterM=06
)
IF %Month%==08 (
SET YesterD=31
SET YesterM=07
)
IF %Month%==09 (
SET YesterD=31
SET YesterM=08
)
IF %Month%==10 (
SET YesterD=30
SET YesterM=09
)
IF %Month%==11 (
SET YesterD=31
SET YesterM=10
)
IF %Month%==12 (
SET YesterD=30
SET YesterM=11
)
GOTO:RENAMENOW
:: Subroutine to calculate if this year is a leap year
:: (I am not sure if the century calculations are right)
:LeapYear
:: If the year divisable by 4 then it is a leap year . .
SET /A LeapYear = %Year% / 4
SET /A LeapYear = %LeapYear% * 4
IF %LeapYear% EQU %Year% SET YesterD=29
:: . .unless it is also divisible by 100 . .
SET /A LeapYear = %Year% / 100
SET /A LeapYear = %LeapYear% * 100
IF %LeapYear% EQU %Year% SET YesterD=28
:: . .but when it is divisible by 400 it is a leap year again (?)
SET /A LeapYear = %Year% / 400
SET /A LeapYear = %LeapYear% * 400
IF %LeapYear% EQU %Year% SET YesterD=29
GOTO:RENAMENOW
::***********************************************************
:RENAMENOW
rename "%1" "%1"-%SortYest%
Хотя согласен что на vbs элегантнее и короче
Option Explicit
Dim fso, folder, dt
set fso = CreateObject("Scripting.FileSystemObject")
'replace c:\test with whatever folder, or a parameter from WScript.Arguments, or some input box or something
set folder = fso.GetFolder("c:\test")
dt = DateAdd("d", -1, Date())
folder.Name = folder.Name & "-" & Year(dt) & Month(dt) & Day(dt)
set folder=Nothing
set fso=Nothing
@ECHO OFF
:: Keep variables local
SETLOCAL
:: Export registry's date format settings to a temporary file
START /W REGEDIT /E C:\_TEMP.REG "HKEY_CURRENT_USER\Control Panel\International"
:: Read the exported data
FOR /F "tokens=1* delims==" %%A IN ('TYPE C:\_TEMP.REG ^| FIND /I "iDate"') DO SET iDate=%%B
FOR /F "tokens=1* delims==" %%A IN ('TYPE C:\_TEMP.REG ^| FIND /I "sDate"') DO SET sDate=%%B
DEL C:\_TEMP.REG
:: Remove quotes from exported values
SET iDate=%iDate:"=%
SET sDate=%sDate:"=%
:: Parse today's date depending on registry's date format settings
IF %iDate%==0 FOR /F "TOKENS=1-4* DELIMS=%sDate%" %%A IN ('DATE/T') DO (
SET Year=%%C
SET Month=%%A
SET Day=%%B
)
IF %iDate%==1 FOR /F "TOKENS=1-4* DELIMS=%sDate%" %%A IN ('DATE/T') DO (
SET Year=%%C
SET Month=%%B
SET Day=%%A
)
IF %iDate%==2 FOR /F "TOKENS=1-4* DELIMS=%sDate%" %%A IN ('DATE/T') DO (
SET Year=%%A
SET Month=%%B
SET Day=%%C
)
:: Remove the day of week if applicable
FOR %%A IN (%Year%) DO SET Year=%%A
FOR %%A IN (%Month%) DO SET Month=%%A
FOR %%A IN (Ъy%) DO SET Day=%%A
:: Today's date in YYYYMMDD format
SET SortDate=%Year%%Month%Ъy%
:: Strip leading zero from Day
SET DayS=Ъy%
IF Ъy:~0,1%==0 SET DayS=Ъy:~1%
:: Calculate yesterday's date
IF ЪyS% EQU 1 (
SET YesterY=%Year%
CALL :RollMonth
) ELSE (
SET /A YesterD=ЪyS% - 1
SET YesterM=%Month%
SET YesterY=%Year%
)
:: Add leading zero to YesterD if necessary
IF %YesterD% LSS 10 SET YesterD=0%YesterD%
:: Yesterday's date in YYYYMMDD format
SET SortYest=%YesterY%%YesterM%%YesterD%
:: Done
GOTO:RENAMENOW
:: * * * * * * * * Subroutines * * * * * * * *
:: Subroutine to get yesterday's date if today is the first day of the month
:: Thanks for Aaron M. Jones who pointed out an error in the YesterD value for Month 2
:RollMonth
IF %Month%==01 (
SET YesterD=31
SET YesterM=12
SET /A YesterY = %Year% - 1
)
IF %Month%==02 (
SET YesterD=31
SET YesterM=01
)
IF %Month%==03 (
SET YesterD=28
SET YesterM=02
CALL :LeapYear
)
IF %Month%==04 (
SET YesterD=31
SET YesterM=03
)
IF %Month%==05 (
SET YesterD=30
SET YesterM=04
)
IF %Month%==06 (
SET YesterD=31
SET YesterM=05
)
IF %Month%==07 (
SET YesterD=30
SET YesterM=06
)
IF %Month%==08 (
SET YesterD=31
SET YesterM=07
)
IF %Month%==09 (
SET YesterD=31
SET YesterM=08
)
IF %Month%==10 (
SET YesterD=30
SET YesterM=09
)
IF %Month%==11 (
SET YesterD=31
SET YesterM=10
)
IF %Month%==12 (
SET YesterD=30
SET YesterM=11
)
GOTO:RENAMENOW
:: Subroutine to calculate if this year is a leap year
:: (I am not sure if the century calculations are right)
:LeapYear
:: If the year divisable by 4 then it is a leap year . .
SET /A LeapYear = %Year% / 4
SET /A LeapYear = %LeapYear% * 4
IF %LeapYear% EQU %Year% SET YesterD=29
:: . .unless it is also divisible by 100 . .
SET /A LeapYear = %Year% / 100
SET /A LeapYear = %LeapYear% * 100
IF %LeapYear% EQU %Year% SET YesterD=28
:: . .but when it is divisible by 400 it is a leap year again (?)
SET /A LeapYear = %Year% / 400
SET /A LeapYear = %LeapYear% * 400
IF %LeapYear% EQU %Year% SET YesterD=29
GOTO:RENAMENOW
::***********************************************************
:RENAMENOW
rename "%1" "%1"-%SortYest%
Хотя согласен что на vbs элегантнее и короче
Option Explicit
Dim fso, folder, dt
set fso = CreateObject("Scripting.FileSystemObject")
'replace c:\test with whatever folder, or a parameter from WScript.Arguments, or some input box or something
set folder = fso.GetFolder("c:\test")
dt = DateAdd("d", -1, Date())
folder.Name = folder.Name & "-" & Year(dt) & Month(dt) & Day(dt)
set folder=Nothing
set fso=Nothing
На самом деле, это очень длинный скрипт получается.... надо учитывать переход на предыдущий месяц (если сегодня, например, 1-е мая) и предыдущий год, если сегодня 1-е января...
Похожие вопросы
- Довелось увидеть папку с файлами, дата создания папки 69й год, тыща девятьсот, разумеется. Как такое возможно?
- Вопрос! Почему нельзя создать папку с названием "Con"?
- Создал папку на рабочем столе! Как сдедать чтобы только я мог заходить в нее??? Как пароль поставить?
- кто может создать папку на рабочем столе по-имени CON
- почему В Windows нельзя создать папку с названием "Con".?
- Как создать папку с точкой в начале. Не получается,попробуйте сами
- А правда, чтов Windows нельзя создать папку с названием "Con", этим словом в детстве обзывали Билла Гейтса?
- Скрипт сайта ка его редактировать и залить на хост
- c# скрипт
- Подскажите команду для перемещения файлов и папок с помощью батника!