无忧启动论坛

标题: 批处理执行结果求助 [打印本页]

作者: as8686886    时间: 2024-5-6 12:54
标题: 批处理执行结果求助
本帖最后由 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
复制代码



作者: lhc0688    时间: 2024-5-6 13:02
不懂代码,不过从简单逻辑上,感觉两点:

1、既然变量赋的都是固定值,为何还要用判断语句呢?
2、两个判断语句前后并列,只有是、没有非,这样判断还有什么用?当前面符合则直接跳过,后一句不就没意义了吗?
作者: yyz2191958    时间: 2024-5-6 13:08
我这里正确

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

1.png

作者: lhc0688    时间: 2024-5-6 13:08
标题: .
本帖最后由 lhc0688 于 2024-5-6 14:42 编辑

....
作者: softwarezheng    时间: 2024-5-6 13:17
谢谢
作者: szwp    时间: 2024-5-6 13:21
第一行删除,运行结果截屏
作者: hua_wuxin    时间: 2024-5-6 14:59
我猜你是想解决两个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%

作者: as8686886    时间: 2024-5-6 15:32
hua_wuxin 发表于 2024-5-6 14:59
我猜你是想解决两个if...goto...只执行了第一个的问题吧

@echo off

是的,你这个代码测试没问题,可以达到我的需求。谢谢大佬!
作者: as8686886    时间: 2024-5-6 15:36
lhc0688 发表于 2024-5-6 13:02
不懂代码,不过从简单逻辑上,感觉两点:

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

我这是做PXE客户端启动代码用,设置好客户端常执行代码之后就可以用set设置变量值来控制客户端每次是否运行对应功能语句,需要运行只需要修改对应的模块变量值为0或1就行了,比如ghost、NetCopy等。
作者: maisifu    时间: 2024-5-6 15:38
学习。。。
作者: Su_jacc    时间: 2024-5-6 17:31
此时
:123
echo 123

:112
echo 112

:end
pause

等于
:123
echo 123
echo 112
pause
作者: 都市浪子666    时间: 2024-5-6 18:10
本帖最后由 都市浪子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
复制代码








作者: wang1126    时间: 2024-5-6 19:17
谢谢分享
作者: Su_jacc    时间: 2024-5-6 19:50
都市浪子666 发表于 2024-5-6 18:10

这个不可行,如果set IsoGet=1
                        set IsoGet1=1
也只跳转到:123,正常应该跳转到:123和:112
作者: Su_jacc    时间: 2024-5-6 20:01
hua_wuxin 发表于 2024-5-6 14:59
我猜你是想解决两个if...goto...只执行了第一个的问题吧

@echo off

这个运行是正确的。对于exit /b %errorlevel%这句不理解,请教一下,%errorlevel%的值通常为1是成功,0为失败,那么就是exit /b 0 或者exit /b 1,看不懂
作者: 都市浪子666    时间: 2024-5-6 20:06
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

复制代码

作者: hua_wuxin    时间: 2024-5-6 20:14
本帖最后由 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%




作者: as8686886    时间: 2024-5-6 22:13
本帖最后由 as8686886 于 2024-5-6 22:22 编辑

最终成品出来了

作者: Su_jacc    时间: 2024-5-7 16:05
都市浪子666 发表于 2024-5-6 18:10

我觉得goto :end多余 没有又不行
作者: softwarezheng    时间: 2024-5-9 13:02
thanks  you very  much
作者: 财源茂盛    时间: 2024-6-24 15:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: 财源茂盛    时间: 2024-6-24 15:03
提示: 作者被禁止或删除 内容自动屏蔽
作者: 财源茂盛    时间: 2024-6-26 11:32
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net./) Powered by Discuz! X3.3