中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-22 05:22
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于变量延迟的理解 请教 查看 774 回复 5
楼 主 关于变量延迟的理解 请教 发表于 2008-07-13 20:57 ·  中国 广东 中山 电信
初级用户
积分 126
发帖 47
注册 2007-07-02 17:00
18年会员
UID 92952
性别 男
状态 离线
这是我在看了别人的代码后写的一个读取当前日期的一个批处理,不过会用是会用了,但对其中的一些地方知其然,不知其所以然,希望大家给我解释一下,谢谢!
1.为什么开头用了setlocal,后面set那里还要用call再次延迟
2.为什么用%%str1%%输出时必须要用call才可以得出正确结果,而用!str1!l则可以不用?
3.如果不用str做中间变量,直接对%%a进行字符截取,可以做到吗?应该怎样做?
@echo off
setlocal EnableDelayedExpansion
for /f "delims= " %%a in ('date /t') do (
set "str=%%a"
call set "str1=%%str:~5,2%%"
call echo %%str1%%
echo !str1!
)
pause
2 发表于 2008-07-13 21:20 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
代码是谁写的,这么复杂啊?
C:\Test>date /t
07/13/2008 Sun

C:\Test>echo %date:~0,10%
07/13/2008
3 发表于 2008-07-13 23:46 ·  中国 江西 南昌 电信
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
楼主不是说了是自己写的吗?
4 发表于 2008-07-14 07:35 ·  中国 广东 揭阳 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
18年会员
UID 110072
性别 男
状态 离线
有时候 一个变量中要引用另一个变量 也要用到变量延迟的 !来与% 号区分
例如:
set s=Cn-Dos
set OurCn-Dos=number1!
echo %Our%s%%
这样是不能成功的,系统难以分辨变量是指哪一部分区分的
正解是这样:
setlocal enabledelayedexpansion
set s=Cn-Dos
set OurCn-Dos=number1!
echo !Our%s%!
pause
5 发表于 2008-07-18 20:54 ·  中国 广东 中山 电信
初级用户
积分 126
发帖 47
注册 2007-07-02 17:00
18年会员
UID 92952
性别 男
状态 离线
我需要得到的是纯粹数字的日期形式啊,而且还不需要年,只要日和月,比如0718这样
6 to 5楼 发表于 2008-07-18 20:59 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
C:\Test>echo %date%
07/18/2008 Fri

C:\Test>echo %date:~0,2%%date:~3,2%
0718
论坛跳转: