我有一个参考当前学年的批处理文件。目前我需要每年手动更改“设置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'?
答案 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
格式获取日期时,我们可以轻松地比较"日期"