Board logo

标题: [文本处理] [已解决]批处理变量扩展的用法是什么? [打印本页]

作者: 领航者    时间: 2011-5-17 07:19     标题: [已解决]批处理变量扩展的用法是什么?

%a% 可以用 %a:~*,*%  来截取
1,其中*可不可以是其他的变量呢?
2,for do语句中的%%n能不能用这个方式呢?
希望知道的朋友多多解说一下
作者: mxxcgzxxx    时间: 2011-5-17 07:29

本帖最后由 mxxcgzxxx 于 2011-5-17 07:31 编辑

1、可以用别的变量来代替,不过要先开启扩展功能。而且格式要改变
如%b%=2     !a:~%b%,%b%! 就和 %a:~2,2% 是一样的
2、FOR中的用法也是相同的
for /l %%1 in (0,1,9) do echo !a:~%%1,1!
会逐个显示%a%中的前十个字符

可以查找相关函数嵌套的文章
作者: 领航者    时间: 2011-5-17 07:48

本帖最后由 领航者 于 2011-5-17 08:05 编辑

2# mxxcgzxxx


谢谢了 第一个问题明白了,
for /l %%1 in (0,1,9) do echo !a:~%%1,1!
后面的!a:~%%l,1!   这个a是什么意思?
我这第二个问题是想要处理%%i,而不是%a%,可能我问题提问的不明确.
%%i可以扩展吗?
作者: hanyeguxing    时间: 2011-5-17 12:25

%%i这样的变量不能,但可以使用 如set a=%%i后,对变量a这样操作
作者: applba    时间: 2011-5-17 15:05

本帖最后由 applba 于 2011-5-18 00:04 编辑

在没有开启变量延迟时,你无法在%a:~*,*%里面使用%,肯定会冲突。
开启变量延迟后,!a:~*,*!里面使用%是不会发生冲突的。

只有环境变量的引用(%a%,!a!)才能能进行 %a:~1,1% 和 !a:str1=str2! 形式的增强。
参数变量(%0~%9)和循环变量(%i、%%i)的引用不能直接这样增强,需要通过环境变量中转。
即4楼所说的set a=%n 、set a=%%i。

参数变量和循环变量的引用支持另一种形式的增强:
如果他们的值是合法的路径或文件名,可以对他们进行扩充,比如%~f0,%%~dpi。
环境变量的引用(%a%,!a!)是不支持这样增强的。
作者: Hello123World    时间: 2011-5-17 16:21

直接的引用,必须加上变量延迟!
  1. @echo off
  2. setlocal EnableDElayedExpansion
  3. set a=1
  4. set b=2
  5. set c=helloworld
  6. echo !c:~%a%,%b%!
  7. for /l %%i in (0 1 4) do echo !c:~%%i,1!
  8. pause>nul
复制代码

作者: 领航者    时间: 2011-5-17 19:30

谢谢大家了,学了不少




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2