Board logo

标题: [文本处理] 批处理怎样向标签传入一个变量返回另一个值? [打印本页]

作者: wgf4242    时间: 2011-2-28 11:31     标题: 批处理怎样向标签传入一个变量返回另一个值?

@echo off set ss=a
call :test %ss%
echo %ss%
goto :EOF

:test
set %1=改变值

Q1. 这样写不行啊。我想改变一下变量的值。
Q2. 除了call :test %ss%这种方法还有什么办法能调用么?
作者: batman    时间: 2011-2-28 11:46

  1. @echo off&setlocal enabledelayedexpansion
  2. set "ss=^!a^!"
  3. call :test %ss%
  4. echo %ss%
  5. pause&goto :eof
  6. :test
  7. set "a=bathome"
复制代码

作者: batman    时间: 2011-2-28 11:47

事实上可以直接赋值:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "ss=^!a^!"
  3. set  "a=bathome"
  4. echo %ss%&pause
复制代码

作者: wgf4242    时间: 2011-2-28 12:19

我不想用 set "a=bathome"。。。要是变量不叫a还得改名。

能不能用%1这种来替换传入参数。或者有没有办法弄个返回值出来?

[ 本帖最后由 wgf4242 于 2011-2-28 12:20 编辑 ]
作者: CrLf    时间: 2011-2-28 13:07

%1 %2这样的参数据我所知只能通过调用(文件或标签,目前没找到调用命令时赋值的办法)来赋值
  1. %1 call :123 456
  2. echo %2
  3. exit
  4. :123
  5. echo 456
  6. %0 :: 囧
复制代码

作者: CrLf    时间: 2011-2-28 13:08

当然也可以用exit /b来设置返回值
作者: batman    时间: 2011-2-28 13:43

这样不行?
  1. @echo off
  2. set "ss=a"
  3. call :test ss
  4. echo %ss%
  5. pause&goto :eof
  6. :test
  7. set "%1=bathome"
复制代码

作者: wgf4242    时间: 2011-2-28 14:40

这个好。。。谢啦。。

@batman,为什么set 后面加引号?有什么说法么?
(不加引号确实是不行)
作者: wc726842270    时间: 2011-2-28 15:31     标题: 回复 8楼 的帖子

防止特殊符号对其分组,有兴趣不防试一下
SET  A   B=9或SET A=S  0  K
作者: CrLf    时间: 2011-2-28 16:10

我也发一个,另类变量名的设置及其调用:
  1. @echo off&setlocal enabledelayedexpansion
  2. set "ss=a"
  3. call :test ss
  4. echo ss=%ss%
  5. echo !%%1!
  6. set|find "%%"
  7. pause&goto :eof
  8. :test
  9. set "%%1=bathome"
复制代码





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