1

已经为上述内容做了很多搜索(任何内容的指南),但无济于事。谁能给我推荐一个?

然而,在现在时,我试图理解下面的代码示例,它返回月份的两位数表示,对应于 v 中设置的 3 个字符的月份名称:

    SET v=May

    SET map=Jan-01;Feb-02;Mar-03;Apr-04;May-05;Jun-06;Jul-07;Aug-08;Sep-09;Oct-10;Nov-11;Dec-12
    CALL SET v=%%map:*%v%-=%%
    SET v=%v:;=&rem.%

    ECHO.%v%
4

3 回答 3

2

SET v=May设置变量

SET map=Jan-01;Feb-02;Mar-03;Apr-04;May-05;Jun-06;Jul-07;Aug-08;Sep-09;Oct-10;Nov-11;Dec-12设置替换字符串

CALL SET v=%%map:*%v%-=%%- 将 %v 设置为map,但将 %v%-之前的所有内容替换为空(将所有内容:替换为空(= 之后没有替换代码) -现在*May-v05;Jun-06;Jul-07;Aug-08;Sep-09;Oct-10;Nov-11;Dec-12

SET v=%v:;=&rem.%replace ;with&rem设置一行,将 v 设置为05& rem注释掉命令的所有其他部分。执行的命令是SET v=05 & rem.Jun-06 & rem.Jul-07 & rem.Aug-08 & rem.Sep-09 & rem.Oct-10 & rem.Nov-11 & rem.Dec-12

ECHO.%v%给出了答案

该站点提供了很多信息,但是运行批处理文件并放置 echo %v% 也会有所帮助

于 2012-06-26T21:12:04.467 回答
1

打扰一下。我不喜欢这种类型的代码。在我个人看来,以这种方式将这些值作为数组进行管理是很清楚的:

rem Prepare the array of two-digits values for each 3-letters month names:
for %%a in ("Jan=01" "Feb=02" "Mar=03" "Apr=04" "May=05" "Jun=06" "Jul=07" "Aug=08" "Sep=09" "Oct=10" "Nov=11" "Dec=12") do (
   set month%%~a
)
rem Previous code is equivalent to these 12 lines:
rem set monthJan=01
rem set monthFeb=02
. . . .
rem set monthDec=12

rem This way, the result is immediately accessible:
SET v=May
CALL SET v=%%month%v%%%

rem Or in the clearer way using Delayed Expansion:
SET v=!month%v%!

monthXXX是12 个不同的 3 个字母月份名称的值数组。

SET v=May索引的值设置为元素数组。

SET v=!month%v%!先扩展为SET v=!monthMay!(正常扩展),然后扩展为SET v=05(延迟扩展)。

我已经解释了我必须在这些帖子中的每一个细节中更喜欢这种表示法的原因:

cmd.exe(批处理)脚本中的数组、链表和其他数据结构

DIR 输出到 BAT 阵列?

如果有人认为这个答案是题外话,我深表歉意......

安东尼奥

于 2012-06-26T23:05:20.973 回答
0

对于那些想要反过来,如果输入的月份数错误想要一个错误的人,把它放在一个名为 script.cmd 的文件中:

@echo off
set mNum=%1

set mMap=01-Jan;02-Feb;03-Mar;04-Apr;05-May;06-Jun;07-Jul;08-Aug;09-Sep;10-Oct;11-Nov;12-Dec
call set mName=%%mMap:*%mNum%-=%%
set mName=%mName:;=&rem.%
if "%mName%" == "01-Jan" (
  echo Wrong month number "%mNum%"!
  goto :EOF
  )

echo Month %mNum% is "%mName%".

并使用参数启动脚本:

> script 02
Month 02 is "Feb".

> script 13
Wrong month number "13"!

> script foo
Wrong month number "foo"!

但是,它不涵盖空值:

> script
Month  is "Jan".
于 2013-07-25T09:35:16.850 回答