我正在开发一个批处理脚本,其中当前日期为-1个月并将其格式化为 YYYYMMDD ,但是当我执行我的代码时,最终变量只有一年(没有连接月份)。你能帮我找一下这个错误吗?
代码如下:
echo off &setlocal
setlocal EnableDelayedExpansion
SET _test=%date%
SET _month=%_test:~4,2%
SET _day=01
SET search_year=%_test:~10,4%
IF "%_month%" EQU 1 (
set search_month=12
set /a search_year= %seach_year% -1
)
IF "%_month%" EQU 2 (
set search_month=1
)
IF "%_month%" EQU 3 (
set search_month=2
)
IF "%_month%" EQU 4 (
set search_month=3
)
IF "%_month%" EQU 5 (
set search_month=4
)
IF "%_month%" EQU 6 (
set search_month=5
)
IF "%_month%" EQU 7 (
set search_month=06
)
IF "%_month%" EQU 8 (
set search_month=07
)
IF "%_month%" EQU 9 (
set search_month=08
)
IF "%_month%" EQU 10 (
set search_month=09
)
IF "%_month%" EQU 11 (
set search_month=10
)
IF "%_month%" EQU 12 (
set search_month=11
)
echo Month-1 is %search_month%
set /a total = %search_year%%search_month%
echo total is %total%
由于
答案 0 :(得分:0)
您的月份比较不正确。从%_test:~4,2%
获取月份意味着当前月份(五月)将返回05
,而不是5
。
此外,当比较的一侧有引号时,另一方必须有引号,因为批处理在比较时包含引号。由于这两件事,search_month永远不会被设置。您的比较应如下所示:
IF "%_month%" EQU "05" (
set search_month=4
)
也就是说,12个基本相同的比较是大量的冗余代码,你可以简化:
@echo off
setlocal enabledelayedexpansion
SET _test=%date%
SET _month=%_test:~4,2%
SET _day=01
SET search_year=%_test:~10,4%
if "%_month%" equ "01" (
set search_month=12
set /a search_year-=1
) else (
REM Remove any zero-padding so that months are not considered octal.
REM We do this by putting a 1 in front of %_month% and then subtracting 100
REM because set /a returns in decimal.
REM And then we subtract 1 because we're getting the previous month.
set /a search_month=1%_month%-100-1
REM Replace the zero-padding since you want YYYYMM format.
REM Use delayed expansion here because search_month was created inside
REM of a code block.
if !search_month! lss 10 set search_month=0!search_month!
)
echo Month-1 is !search_month!
set total=%search_year%!search_month!
echo total is %total%
答案 1 :(得分:0)
无需在%_month%
周围加上引号
这就是你想要的,
echo off &setlocal
setlocal EnableDelayedExpansion
SET _test=%date%
SET _month=%_test:~4,2%
SET _day=01
SET search_year=%_test:~10,4%
IF %_month% EQU 1 (
set search_month=12
set /a search_year= %seach_year% -1
)
IF %_month% EQU 2 (
set search_month=01
)
IF %_month% EQU 3 (
set search_month=02
)
IF %_month% EQU 4 (
set search_month=03
)
IF %_month% EQU 5 (
set search_month=04
)
IF %_month% EQU 6 (
set search_month=05
)
IF %_month% EQU 7 (
set search_month=06
)
IF %_month% EQU 8 (
set search_month=07
)
IF %_month% EQU 9 (
set search_month=08
)
IF %_month% EQU 10 (
set search_month=09
)
IF %_month% EQU 11 (
set search_month=10
)
IF %_month% EQU 12 (
set search_month=11
)
echo Month-1 is %search_month%
set /a total = %search_year%%search_month%
echo total is %total%