自动将当前学年设置为批处理文件设置

时间:2018-02-04 18:02:11

标签: datetime batch-file

我有一个参考当前学年的批处理文件。目前我需要每年手动更改“设置SchoolYear = t20172018”这一行。我试图找到一个更优雅的解决方案,但到目前为止还没有成功。学年通常从8月1日到次年6月30日。

示例:

set PSScript="C:\converter\Powershell\somescript.ps1"
set sourcePath="C:\Converter\Output"
set archivePath="C:\Converter\Archive"
set logPath="C:\Converter\Log"
set SchoolYear=t20172018
Rem # Uploading data
Powershell.exe -executionpolicy remotesigned  -Command "& '%PSScript%' '%sourcePath%' '%archivePath%' '%logPath%' '%SchoolYear%'" 

是否可以让批处理文件在每年8月1日自动更改'set schoolyear = t20XX20XX'?

2 个答案:

答案 0 :(得分:0)

这应该做的工作:

SET "check_date=%DATE:~0,2%"
SET "check_date=%DATE:~3,-5%%check_date%"
SET "current_year=%DATE:~6%"
SET /A "next_year=%current_year%+1"
SET /A "last_year=%current_year%-1"

IF "%check_date%" GEQ "0801" (SET "SchoolYear=t%current_year%%next_year%") ELSE (SET "SchoolYear=t%last_year%%current_year%")

日期方案为DD.MM.YYYY,如果您的计算机上的方案为MM/DD/YYYY,则需要将第二行调整为:SET "check_date=%check_date%%DATE:~3,-5%"

答案 1 :(得分:0)

当您明确要求批量解决方案时:

@echo off
setlocal
for /f "tokens=2 delims==" %%a in ('wmic os get localdatetime /value^|find "="') do set dt=%%a
set y=%dt:~0,4%
set d=%dt:~4,4%
if "%d%" lss "0801" set /a y -= 1
set /a ny=y+1
set schoolyear=t%y%%ny%
echo %schoolyear%

使用wmic可能比使用%date%更复杂,但它与区域设置无关。

注意:if正在比较字符串,而不是日期,但是当我们以MMDD格式获取日期时,我们可以轻松地比较"日期"