找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24814|回复: 6

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

[复制链接]
发表于 2011-5-17 07:19:21 | 显示全部楼层 |阅读模式
%a% 可以用 %a:~*,*%  来截取
1,其中*可不可以是其他的变量呢?
2,for do语句中的%%n能不能用这个方式呢?
希望知道的朋友多多解说一下

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-5-17 07:29:12 | 显示全部楼层
本帖最后由 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技术 +2 收起 理由
Hello123World + 1 一定要开启变量延迟。
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-5-17 07:48:27 | 显示全部楼层
本帖最后由 领航者 于 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可以扩展吗?
发表于 2011-5-17 12:25:45 | 显示全部楼层
%%i这样的变量不能,但可以使用 如set a=%%i后,对变量a这样操作
发表于 2011-5-17 15:05:11 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2011-5-17 16:21:30 | 显示全部楼层
直接的引用,必须加上变量延迟!
  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:20 | 显示全部楼层
谢谢大家了,学了不少
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:29 , Processed in 0.021717 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表