gpt4 book ai didi

c++ - Windows 批处理命令 - 高级错误抑制问题

转载 作者:可可西里 更新时间:2023-11-01 11:14:06 25 4
gpt4 key购买 nike

我正在编写一个非常大的目的驱动的 Windows 命令提示批处理程序。

问题是我无法抑制错误的文本。我可以“cls”,但这意味着几乎每个命令都会对提示进行 cls,我不想将其强加给用户。我还尝试在其后使用 >nul,并在命令前使用 2>nul。 2>nul CMDOW.EXE/RUN 的问题在于它不会将错误存储在 ERRORLEVEL 环境变量中......我也几乎每次在他们使用命令时都无法显示此错误信息提示。

我的控制台可以做很多事情,包括快速导航和网页/程序/文件夹访问。最近我一直在尝试围绕中央批处理程序实现一个基本的包装器,这样如果您键入无法识别的命令,它会首先检查您输入的文本字符串是否是当前目录中文件夹名称的开头.如果是这样,它会自动将您移动到文件夹中。否则,它将显示通常的错误消息。

我这样做是为了使输入不再是标准的dos输入,而是带有模仿通常界面的提示的set/p命令。我明白了,如果它在使用 CMDOW 的 PATH 中,则在键入程序名称时不会等待,如果它前面没有“开始”。

现在一切正常,除了我有一个小问题,这是一个很大的视觉干扰。我提示用户并将输入存储到环境变量,然后使用 CMDOW.exe/RUN 首先尝试执行输入文本并查看它是否是可执行文件(这包括路径以及当前目录中的 .exes) .然后我检查 ERRORLEVEL 以查看这是否导致错误。如果是这样,我继续下一个方法。

我还尝试编写一个小的 C++ 程序来为我执行,它可以很容易地与 winexec 一起工作,但我不知道如何获取错误代码以确认进程已成功启动。如果我能做到这一点,那么我就可以将该结果发送到环境变量。如果位置不绝对,CreateProcess() 将无法工作。我不能只插入输入文本并让它工作,但我相信它会暂停直到终止。 ShellExecute() 有效,但似乎不像从输入中插入那样简单......尽管它似乎有一个获取输出的现成方法。我可能会补充说我不擅长 C++,我学习了我需要的东西。

我不确定如何解决这个问题。我也不确定是否存在一些特殊的方法来绕过该错误输出,同时仍然知道它没有正确执行。

这是我的代码:

@SETLOCAL ENABLEDELAYEDEXPANSION
@ECHO OFF

@for /L %%i in (0,0,0) do @(
set zinput=
set /p zinput=^%time%[%cd:~0,1%]^>
call :EXECUTE
set zinput=
)

:EXECUTE
IF ("%zinput%")==("") GOTO :EOF
cmdow /run "%zinput%"
set ERRCODE=%ERRORLEVEL%
IF ("%ERRCODE%")==("1") call :UNDEFINED
GOTO :EOF

:UNDEFINED
%zinput%
set ERRCODE=%ERRORLEVEL%
IF %ERRCODE%==9009 GOTO ZDIR
GOTO :EOF

:ZDIR
set zDIR=
DIR /B /AD-H|sed -n "/^%zinput%/"Ip>"%aicnspath%\etc\dump.txt"
set /p zDIR=<"%aicnspath%\etc\dump.txt"
IF NOT DEFINED zDIR GOTO UNDEFINED2
cd %zDIR%
call "%aicnspath%\etc\update.bat"
cls
echo AUTO-MOVED INTO: %CD%|tr '[a-z]' '[A-Z]'|sed "s/^/%_hc%%_bc2%/"|sed "s/$/%_bc%/"
echo -----------------------------------------
echo/
GOTO :EOF

:UNDEFINED2
cls
echo/
echo The string %_hc%%_bc2%^'%zinput%^'%_bc% is not recognized by AICNS as any internal or external command, operable program or batch file.
echo/
GOTO :EOF

最佳答案

试试这个...

CMDOW /run "%zinput%" >nul 2>&1

在此之后您应该仍然可以访问 ERRORLEVEL

关于c++ - Windows 批处理命令 - 高级错误抑制问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8191548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com