Board logo

标题: [其他] 批处理for语句怎样替换变量内容? [打印本页]

作者: wolf    时间: 2007-11-13 11:02     标题: 批处理for语句怎样替换变量内容?

1.txt文档内容为
net user abc123456789 123456 /add
我想把abc123456789换为123456789
利用下面的代码
  1. @echo off
  2. for /f "tokens=1,2,3* delims= " %%i in (1.txt) do set var=%%k
  3. set var=%var:~-9%
  4. set %%k=var
  5. echo %var%
  6. echo %%k
  7. pause
复制代码

为什么%%k显示的是%k
难道不能对%k赋值了吗?
作者: youxi01    时间: 2007-11-13 11:31

测试代码:
  1. @echo off &setlocal enabledelayedexpansion
  2. for /f "tokens=1,2,3,*" %%a in (1.txt) do (
  3.    set var=%%c
  4.    set var=!var:~3!
  5.    echo !var!
  6.   )
  7. pause
复制代码

作者: wolf    时间: 2007-11-13 12:12

先谢谢版主
对于版主的代码
我又点疑问
就是为什么你要用var=!var:~3!
不是利用 var=%var:~-9%
还有这里利用setlocal enabledelayedexpansion
好像没有什么作用(但是测试结果说明不能少)
我吧版主代码换为
  1. @echo off
  2. for /f "tokens=1,2,3,*" %%a in (1.txt) do (
  3.    set var=%%c
  4.    set var=%var:~-9%
  5.    echo %var%
  6.   )
  7. pause
复制代码
为什么显示echo处于关闭状态
还有我本想知道的是为什么那个%%k不能正确显示?
作者: youxi01    时间: 2007-11-13 13:49

1、这里setlocal enabledelayedexpansion的作用就是告诉 批处理 起用了延迟变量,让批处理 实时 掌握变量的变化;
2、就是为什么你要用var=!var:~3!
   不是利用 var=%var:~-9%
一样的道理,在这个地方,两种方法都可以。
作者: novaa    时间: 2007-11-13 18:30

我以前看过一个帖子说%%i在FOR后会变为%i之类的?
对这个不是很清楚
作者: novaa    时间: 2007-11-15 12:46

懂了
for  语句后面的变量只能用FOR对他赋值
呵呵





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