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

[其他] 【已解决】有几个批处理问题求教

本帖最后由 chouxia 于 2015-4-16 16:30 编辑

首先祝大家春节快乐!
问题如下:
1、在批处理用如何使子程序返回?
举例:想让回显显示okok。应该怎么调用:2?我记得是不是有个返回的指令之类的。如果真有这样的指令,返回后的变量是怎么处理的?
:1
echo ok
goto 2
set a=100
echo ok ok
echo %a
:2
echo ko
set a=200
2、sed.exe的errorleve哪位能给一份?
如果这个没有的话,我怎么判断sed执行成功?
加循环判断吗?
3、判断某个变量值的范围。大于什么小于什么。有什么一行可以搞定的代码吗?
请给出几种代码让我学习下。
谢谢
4、if....else嵌套的时候到底是怎么执行的?实例看着迷糊。麻烦哪位解释一下。

本帖最后由 tmplinshi 于 2015-2-17 06:51 编辑

1、
  • 调用子程序应该使用 call,而不是 goto。
  • 要结束子程序可使用 goto :eof 或者 exit /b。
    其中 exit /b 的末尾可指定一个数字退出码(例如 exit /b 1234567890),之后能用 %errorlevel% 获取退出码。
  • 子程序中的变量也是全局的,除非你在设置变量之前加了 setlocal
  1. :: 调用子程序示例
  2. @echo off
  3. set n=
  4. call :全局变量
  5. echo n=%n%
  6. echo,
  7. set n=
  8. call :变量不保存
  9. echo n=%n%
  10. echo errorlevel=%errorlevel%
  11. pause & exit
  12. :全局变量
  13. echo %0
  14. set n=123
  15. goto :eof
  16. :变量不保存
  17. setlocal
  18. echo %0
  19. set n=123
  20. exit /b 2015
复制代码
2、
判断sed执行成功?如果你的 sed 命令是错误的,sed 会提示错误,然后 errorlevel 会变成 1。

3、
没有 if n between 2 and 5 这样的写法。你可以把两个 if 写在同一行..
  1. if %n% gtr 2 if %n% lss 5 echo "2<n<5"
复制代码
4、
  1. :: if....else嵌套示例
  2. if "%n%" == "1" (
  3. echo 1
  4. ) else if "%n%" == "2" (
  5. echo 2
  6. ) else if "%n%" == "3" (
  7. echo 3
  8. ) else (
  9. echo -
  10. )
复制代码

TOP

第二个问题的答案:
  1. @echo off
  2. sed "s/a/A/" 1.txt
  3. if %errorlevel% equ 0 (
  4.     echo Success
  5. ) else (
  6.     echo Fail
  7. )
  8. pause
复制代码

TOP

第三个问题的答案:
“一行可以搞定的代码”是非常糟糕的代码风格,强烈建议使用 if ... else ...

TOP

返回列表