[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理变量扩展的用法是什么?

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

谢谢大家了,学了不少

TOP

直接的引用,必须加上变量延迟!
  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
复制代码

TOP

本帖最后由 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!)是不支持这样增强的。
1

评分人数

TOP

%%i这样的变量不能,但可以使用 如set a=%%i后,对变量a这样操作
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

本帖最后由 领航者 于 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可以扩展吗?

TOP

本帖最后由 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%中的前十个字符

可以查找相关函数嵌套的文章
2

评分人数

世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

返回列表