无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 2811|回复: 25
打印 上一主题 下一主题

[已解决] 批处理执行结果求助

[复制链接]
跳转到指定楼层
1#
发表于 2024-5-6 12:54:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 as8686886 于 2024-5-6 22:23 编辑

代码如下:
  1. @echo off
  2. set IsoGet=1
  3. set IsoGet1=0

  4. if "%IsoGet%"=="1" Goto 123
  5. if "%IsoGet1%"=="1" Goto 112

  6. :123
  7. echo 123

  8. :112
  9. echo 112

  10. :end
  11. pause
复制代码
如何能实现输出结果为:
  1. 123
复制代码

而不是
  1. 123
  2. 112
复制代码

呢?


感谢各位大佬!最终成品如下(部分代码):
  1. REM 此段脚本功能运行设置,根据使用情况自行修改!
  2. set TightVNC=1
  3. set NetShare=1
  4. REM 以下设置不建议同时运行,运行单个就行!
  5. set Ghost=0
  6. set NetCopy=0
  7. set imagew=0
  8. set getiso=1
  9. REM IsoGet一般不用修改!
  10. set IsoGet=2

  11. cls
  12. title ====PXE自运行脚本,服务端主机名为:%SERVER%,服务端IP地址为:%serverip%====

  13. REM 添加脚本桌面和开始菜单图标
  14. PECMD LINK %Desktop%\运行PXE自动化脚本,%WinDir%\system32\pecmd.exe,%WinDir%\system32\pxe.ini,%Windir%\System32\shell32.dll#18
  15. PECMD LINK %Programs%\网络工具\运行PXE自动化脚本,%WinDir%\system32\pecmd.exe,%WinDir%\system32\pxe.ini,%Windir%\System32\shell32.dll#18

  16. echo.&echo 即将运行从服务端获取的脚本,如不需要运行关闭该窗口即可,10 秒后开始执行...
  17. timeout /t 10 /nobreak
  18. cls

  19. if "%TightVNC%"=="1" call :TightVNC
  20. if "%NetShare%"=="1" call :NetShare
  21. if "%Ghost%"=="1" call :Ghost
  22. if "%NetCopy%"=="1" call :NetCopy
  23. if "%imagew%"=="1" call :imagew
  24. if "%getiso%"=="1" call :getiso
  25. goto END

  26. :TightVNC
  27. REM TightVNC远程启动
  28. pecmd kill tvnserver.exe
  29. echo.&echo 启动TightVNC受控服务并与服务端建立连接
  30. start "" "%programfiles%\TightVNC\tvnserver.exe" -run
  31. choice /t 3 /d y /n >nul
  32. start "" "%programfiles%\TightVNC\tvnserver.exe" -controlapp -connect %serverip%
  33. goto :EOF

  34. :NetShare
  35. echo.&echo 映射服务端的PXE共享文件夹为本地W盘
  36. net use W: \\%serverip%\%share_name% /user:%share_username% %share_password%>nul 2>nul
  37. echo.&echo 已将服务端的PXE共享文件夹映射至本地W盘
  38. goto :EOF

  39. …………此处省略一万字…………

  40. :end
  41. echo.&echo 脚本执行完毕!5秒后自动退出!
  42. echo.&timeout /t 5 /nobreak >nul
  43. exit
复制代码


点评

在echo 123 和echo 112 下面一行 各加一个跳转 Goto :end  发表于 2024-5-6 18:12
2#
发表于 2024-5-6 13:02:55 | 只看该作者
不懂代码,不过从简单逻辑上,感觉两点:

1、既然变量赋的都是固定值,为何还要用判断语句呢?
2、两个判断语句前后并列,只有是、没有非,这样判断还有什么用?当前面符合则直接跳过,后一句不就没意义了吗?
回复

使用道具 举报

3#
发表于 2024-5-6 13:08:33 | 只看该作者
我这里正确

1.png (4.13 KB, 下载次数: 41)

1.png
回复

使用道具 举报

4#
发表于 2024-5-6 13:08:37 | 只看该作者

.

本帖最后由 lhc0688 于 2024-5-6 14:42 编辑

....
回复

使用道具 举报

5#
发表于 2024-5-6 13:21:33 来自手机 | 只看该作者
第一行删除,运行结果截屏
回复

使用道具 举报

6#
发表于 2024-5-6 14:59:38 | 只看该作者
我猜你是想解决两个if...goto...只执行了第一个的问题吧

@echo off
set IsoGet=1
set IsoGet1=1

if "%IsoGet%"=="1" call :123
if "%IsoGet1%"=="1" call :112

:end
pause
exit /b %errorlevel%

:123
echo 123
exit /b %errorlevel%

:112
echo 112
exit /b %errorlevel%
回复

使用道具 举报

7#
 楼主| 发表于 2024-5-6 15:32:54 | 只看该作者
hua_wuxin 发表于 2024-5-6 14:59
我猜你是想解决两个if...goto...只执行了第一个的问题吧

@echo off

是的,你这个代码测试没问题,可以达到我的需求。谢谢大佬!
回复

使用道具 举报

8#
 楼主| 发表于 2024-5-6 15:36:40 | 只看该作者
lhc0688 发表于 2024-5-6 13:02
不懂代码,不过从简单逻辑上,感觉两点:

1、既然变量赋的都是固定值,为何还要用判断语句呢?

我这是做PXE客户端启动代码用,设置好客户端常执行代码之后就可以用set设置变量值来控制客户端每次是否运行对应功能语句,需要运行只需要修改对应的模块变量值为0或1就行了,比如ghost、NetCopy等。
回复

使用道具 举报

9#
发表于 2024-5-6 15:38:53 | 只看该作者
学习。。。
回复

使用道具 举报

10#
发表于 2024-5-6 17:31:21 | 只看该作者
此时
:123
echo 123

:112
echo 112

:end
pause

等于
:123
echo 123
echo 112
pause
回复

使用道具 举报

11#
发表于 2024-5-6 18:10:08 | 只看该作者
本帖最后由 都市浪子666 于 2024-5-6 20:07 编辑
  1. <div class="blockcode"><blockquote>
  2. @echo off

  3. set IsoGet=1
  4. set IsoGet1=0

  5. if "%IsoGet%"=="1" call :123
  6. if "%IsoGet1%"=="1" call :112



  7. goto :end


  8. :123
  9. echo 123
  10. goto :eof


  11. :112
  12. echo 112
  13. goto :eof


  14. :end
  15. pause
复制代码







评分

参与人数 1无忧币 +2 收起 理由
yyz2191958 + 2 赞一个!

查看全部评分

回复

使用道具 举报

12#
发表于 2024-5-6 19:17:50 | 只看该作者
谢谢分享
回复

使用道具 举报

13#
发表于 2024-5-6 19:50:38 | 只看该作者

这个不可行,如果set IsoGet=1
                        set IsoGet1=1
也只跳转到:123,正常应该跳转到:123和:112
回复

使用道具 举报

14#
发表于 2024-5-6 20:01:11 | 只看该作者
hua_wuxin 发表于 2024-5-6 14:59
我猜你是想解决两个if...goto...只执行了第一个的问题吧

@echo off

这个运行是正确的。对于exit /b %errorlevel%这句不理解,请教一下,%errorlevel%的值通常为1是成功,0为失败,那么就是exit /b 0 或者exit /b 1,看不懂
回复

使用道具 举报

15#
发表于 2024-5-6 20:06:28 | 只看该作者
Su_jacc 发表于 2024-5-6 19:50
这个不可行,如果set IsoGet=1
                        set IsoGet1=1
也只跳转到:123,正常应该跳转到 ...

考虑欠缺了,   后面这个可以试试






  1. [url=home.php?mod=space&uid=336905]@echo[/url] off
  2. set IsoGet=1
  3. set IsoGet1=0

  4. if "%IsoGet%"=="1" call :123
  5. if "%IsoGet1%"=="1" call :112



  6. goto :end


  7. :123
  8. echo 123
  9. goto :eof


  10. :112
  11. echo 112
  12. goto :eof


  13. :end
  14. pause

复制代码
回复

使用道具 举报

16#
发表于 2024-5-6 20:14:06 | 只看该作者
本帖最后由 hua_wuxin 于 2024-5-6 20:22 编辑
Su_jacc 发表于 2024-5-6 20:01
这个运行是正确的。对于exit /b %errorlevel%这句不理解,请教一下,%errorlevel%的值通常为1是成功,0为 ...

exit /b %errorlevel%是返回最近一次命令(echo、pause等命令除外)的返回值给上层。如果不需要返回值也可以改成exit /b或者goto :eof。

%errorlevel%通常0是成功,其他值为各种失败代码。
下方这段示例,结果会是“sub1的返回值为0”和“sub2的返回值为9009”。



@echo off

call :sub1
echo sub1的返回值为%errorlevel%
echo.

call :sub2
echo sub2的返回值为%errorlevel%
echo.

:end
pause
exit /b 0

:sub1
dir c:\
exit /b %errorlevel%

:sub2
dirrrrrrrrr c:\
exit /b %errorlevel%



评分

参与人数 1无忧币 +2 收起 理由
yyz2191958 + 2 赞一个!

查看全部评分

回复

使用道具 举报

17#
 楼主| 发表于 2024-5-6 22:13:07 | 只看该作者
本帖最后由 as8686886 于 2024-5-6 22:22 编辑

最终成品出来了
回复

使用道具 举报

18#
发表于 2024-5-7 16:05:07 | 只看该作者

我觉得goto :end多余 没有又不行
回复

使用道具 举报

19#
发表于 2024-6-24 15:03:16 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

20#
发表于 2024-6-24 15:03:29 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

21#
发表于 2024-6-26 11:32:24 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-5 05:51

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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