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

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

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

:test
set %1=改变值

Q1. 这样写不行啊。我想改变一下变量的值。
Q2. 除了call :test %ss%这种方法还有什么办法能调用么?

  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"
复制代码
***共同提高***

TOP

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

TOP

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

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

[ 本帖最后由 wgf4242 于 2011-2-28 12:20 编辑 ]

TOP

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

TOP

当然也可以用exit /b来设置返回值

TOP

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

TOP

这个好。。。谢啦。。

@batman,为什么set 后面加引号?有什么说法么?
(不加引号确实是不行)

TOP

回复 8楼 的帖子

防止特殊符号对其分组,有兴趣不防试一下
SET  A   B=9或SET A=S  0  K
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

我也发一个,另类变量名的设置及其调用:
  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"
复制代码

TOP

返回列表