批处理文件 – 当使用其他命令在块内时,exit / b无法正常工作
发布时间:2020-12-14 04:25:41 所属栏目:Windows 来源:网络整理
导读:我有一个需要在32位上下文中运行的批处理文件,因此包含一些代码来调用具有自己路径的32位命令处理器.此脚本还需要能够通过exit / b 123返回失败时返回的错误代码.但是…… 当退出位于()块中时,AND包含其后的任何语句,则无法正确返回. @echo offsetlocal Enab
我有一个需要在32位上下文中运行的批处理文件,因此包含一些代码来调用具有自己路径的32位命令处理器.此脚本还需要能够通过exit / b 123返回失败时返回的错误代码.但是……
当退出位于()块中时,AND包含其后的任何语句,则无法正确返回. @echo off setlocal EnableDelayedExpansion rem Ensure we're running in 32-bit mode if not %PROCESSOR_ARCHITECTURE%==x86 ( echo Thunking to 32-bit mode %Windir%SysWOW64cmd.exe /c %0 echo !ERRORLEVEL! exit /b !ERRORLEVEL! ) ( echo before exit /b 456 echo after ) 输出如下: H:&;sub.bat Thunking to 32-bit mode before 0 H:&; 如果在退出后删除回显,则它完全按预期工作. H:&;sub.bat Thunking to 32-bit mode before 456 H:&; 即使用rem或任何其他命令替换echo,它仍然会失败.如果手动运行32位cmd.exe并运行相同的脚本,则正确设置退出代码. H:&;sub.bat before H:&;echo %ERRORLEVEL% 456 H:&; 任何人都可以为此做出解释和解决方法吗? 解决方法
在脚本的“else”部分中使用/ b开关导致退出代码被cmd.exe的第二个实例丢失.
当从Syswow64执行批处理文件的第二个实例时,它将以456的代码退出.它的父cmd.exe将收到此退出代码,但没有兴趣保留它. cmd.exe能够成功运行批处理,因此退出0,返回第一个实例. 如果省略脚本“??else”部分中的/ b开关,则会强制批处理文件退出其父cmd.exe,而不是仅完成处理.然后告诉cmd.exe退出456退出代码,这将被保留. “退出”的帮助文本确实推断了这种行为,但是在你阅读它之前看起来并不是很明显! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- wix – 重新缓存的msi仍在运行旧的自定义操作
- Windows Phone 7 – 如何在Windows Phone 7上启动应用程序时
- 从弹出菜单win32 api Python中选择项目
- windows-server-2008 – 我有2个相同的windows 2008 r2服务
- windows-server-2008 – IIS7:无法使用SSL证书和端口443在
- 设计 – 在XP的上下文中有什么比喻?
- .net – 版本控制Windows COM对象
- windows – D运行时为DLL
- Windows 2008上的SSTP无法向任一方向ping
- windows-server-2003 – Linux / Unix中的w命令是否有等效的