中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 14:17
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求解set命令“!!”格式使用? 查看 845 回复 3
楼 主 求解set命令“!!”格式使用? 发表于 2008-02-26 12:23 ·  中国 江苏 南京 电信
初级用户
积分 38
发帖 13
注册 2007-05-11 16:10
19年会员
UID 88183
性别 男
状态 离线
下面是别人写的批处理文件,主要是把ping命令里的部分英文单词翻译并原样输出。
对于 set ret=
echo %%i
for %%a in (%%i) do echo %%a &&if defined %%a (set ret=!ret!!%%a!) else set ret=!ret! %%a
if not "!ret!"=="" (set ret=!ret:time=时间! && echo !ret!) else echo.
)
特别是set ret=!ret!!%%a!的用法搞不清楚,目前也就是set命令的“!!”格式搞不大明白,请解惑!



@echo off
color f2
echo.
set for=于
set of=的
set with=用
set in=(以
set data:=数据
set milli-seconds:=毫秒为单位)
set Approximate=大约
set times=时间:
set round=来回
set trip=行程
set Reply=应答
set from=来自
set bytes=字节
set time=时间:
set timed=时间
set out=超过
set statistics=统计
set Packets:=包:
set Sent=已发送=
set Received=已收到=
set Lost=已丢失=
set loss)=丢失)
set Minimum=最小值=
set Maximum=最大值=
set Average=平均值=
set TTL=TTL=
setlocal enabledelayedexpansion
set a=
set/p a=请输入要ping的网址或IP
for /f "delims=" %%i in ('ping %a%') do (
set ret=
echo %%i
for %%a in (%%i) do echo %%a &&if defined %%a (set ret=!ret!!%%a!) else set ret=!ret! %%a
if not "!ret!"=="" (set ret=!ret:time=时间! && echo !ret!) else echo.
)
pause>nul
2 发表于 2008-02-26 14:41 ·  中国 江苏 苏州 移动
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
18年会员
UID 99089
性别 男
状态 离线
递归调用
尝试以下代码:

@echo off &setlocal enabledelayedexpansion
set a=
for /l %%i in (1 1 20) do (if not defined !a! (set a=!a!%%i)
echo !a!)
pause
3 发表于 2008-02-26 21:29 ·  中国 江苏 南京 电信
初级用户
积分 38
发帖 13
注册 2007-05-11 16:10
19年会员
UID 88183
性别 男
状态 离线
感谢二楼,终于搞懂了这个bat
:: if not "!ret!"=="" (set ret=!ret:time=时间! && echo !ret!) else echo.里的echo !ret!用于输出
:: set ret=!ret:time=时间!的含义是用“时间”替代“time”,但完全没有用处。
:: if not "!ret!"=="" echo !ret!如果以如此格式执行,即没有括号,也能正确输出,但有变化。
4 发表于 2008-05-17 13:38 ·  中国 上海 电信
初级用户
★★
积分 160
发帖 81
注册 2006-07-27 17:52
20年会员
UID 59377
性别 男
状态 离线
还是没有看明白,继续努力中
论坛跳转: