Board logo

标题: 求解set命令“!!”格式使用? [打印本页]

作者: zxone     时间: 2008-2-26 12:23    标题: 求解set命令“!!”格式使用?

下面是别人写的批处理文件,主要是把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
作者: huahua0919     时间: 2008-2-26 14:41
递归调用
尝试以下代码:
@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

作者: zxone     时间: 2008-2-26 21:29
感谢二楼,终于搞懂了这个bat
  ::  if not "!ret!"=="" (set ret=!ret:time=时间! && echo !ret!) else echo.里的echo !ret!用于输出
  ::  set ret=!ret:time=时间!的含义是用“时间”替代“time”,但完全没有用处。
  ::  if not "!ret!"==""  echo !ret!如果以如此格式执行,即没有括号,也能正确输出,但有变化。
作者: jia332     时间: 2008-5-17 13:38
还是没有看明白,继续努力中