Bat obtains the previous month.
If you want to back up the last month's files at the beginning of each month, you need to obtain the last month's Month. Note that the last month of July is July, in addition, the result of reducing the number by 1 for the first 11 times in the previous month is obtained through the current month-1. It is also important to note that it is best to enable the latency variable and make it happen when you replace variables in if and! Reference a variable
The code is as follows: |
Copy code |
? @ Echo off Setlocal EnableDelayedExpansion Pause Rem ################# obtain the date of the previous month ################## ###### Rem get year Set year = % date :~ 0, 4% Rem obtains the month. Echo current year: % year % Set mounth = % date :~ 5, 2% Echo Current Month: % mounth % Echo ##################### If "% mounth %" = "01 "( Set/A year = % year %-1 Set/A lastmounth = 01 Echo current year: % year % _ % mounth % Echo ************** ) Else ( Rem minus one for the current month Echo % mounth % Set/A lastmounth =! Mounth! -1 Echo previous month :! Lastmounth! Rem if the value of 1 in the current month is less than 10, then add it with zero, for example, 2 = 02. If! Lastmounth! Lss 10 ( Set lastmounth =! Lastmounth! ) Echo last month: % year % _! Lastmounth! ) Pause |
Method 2
The code is as follows: |
Copy code |
? @ Echo off Rem setlocal Echo date: % date % REM separation Year Month Day @ Set year = % date :~ 0, 4% Set month = % date :~ 5, 2% Set day = % date :~ 8, 2% Echo this year: % year % Echo this month: % month % Echo ############# test ################# If "% month %" = "01 "( Set/A lastyear = % year %-1 Echo last year: % lastyear % Set lastmonth = 12 Echo last month: % lastmonth % Echo last year_month: % lastyear % _ % lastmonth % Echo ############ month = 01 ############# ) Else ( If "% month %" = "02" set lastmonth = 01 If "% month %" = "03" set lastmonth = 02 If "% month %" = "04" set lastmonth = 03 If "% month %" = "05" set lastmonth = 04 If "% month %" = "06" set lastmonth = 05 If "% month %" = "07" set lastmonth = 06 If "% month %" = "08" set lastmonth = 07 If "% month %" = "09" set lastmonth = 08 If "% month %" = "10" set lastmonth = 09 If "% month %" = "11" set lastmonth = 10 If "% month %" = "12" set lastmonth = 11 Echo last year_month: % year % _ % lastmonth % Echo ############## month! = 01 ############## ) Pause |
Bat deletes objects of a specified date
In windows, the forfiles command can be used to operate files based on the timestamp of files,
Forfiles /? You can view detailed help information.
FORFILES [/P pathname] [/M searchmask] [/S] [/C command] [/D [+ |-] {yyyy/MM/dd | dd}]
/P "directory name" specifies the search path
/S recursive search
/C "specify the command to be executed"
/D query at the specified time
+ Yyyy/MM/dd specifies the absolute time to find the file that is later than the specified date.
-Dd files earlier than the current time and n days earlier than the current time
Displays the files in the specified directory that have not been modified for more than 6 days. By default, the file name is output.
Forfiles/p "% bak_dir %"/S/D-6
Forfiles/p "% bak_dir %"/S/D-6-C "cmd/c echo @ file"
Complete output path
Forfiles/p "% bak_dir %"/S/D-6-C "cmd/c echo @ path"
Delete objects in the specified directory that have been last modified for more than 6 days
Forfiles/p "% bak_dir %"/S/D-6/C "cmd/c del/q @ file"
Bytes
If exist "c: \ Program Files \ winrar" set Path =; "c: \ Program Files \ winrar"; % SystemRoot % \ system32
If exist "c: \ Program Files (x86) \ winrar" set Path =; "c: \ Program Files (x86) \ winrar"; % SystemRoot % \ system32
Forfiles/p "% bak_dir %"/S/D-6/C "cmd/c rar.exe a backp.rar @ path"