我有这段代码:
@ECHO off
set name=code
set command1="path/to/the/file"
set command2=gcc -o %name%.exe %name%.c
start cmd.exe /c %command1% & %command2%>temp
set msg =<temp
call :CheckEmpty "temp"
goto :eof
:CheckEmpty
if %~z1 == 0 (
%name%.exe
exit
)
echo temp
pause
goto :eof
它应该做的是编译code.c,然后测试编译器的输出是否为空,以及是否运行了code.exe。如果不是,则回显错误信息。
我无法让它发挥作用。
我看着&#34; temp&#34;文件,它是空的,虽然它仍然因某种原因回显错误信息。批处理对我来说很陌生,CheckEmpty部分是从另一个stackoverflow问题中复制的。
非常感谢任何帮助!
答案 0 :(得分:0)
我在linux上,所以无法测试以下内容,
但是,这就是我写它的方式。
@ECHO off
PUSHD
set name=code
cd path/to/the/file
gcc -c -ggdb -Wall -Wextra -pedantic -std=c99 -o %name%.o name%.c -I. 2>&1 temp
if errorlevel 1 (goto error)
gcc -ggdb %name%.o -o %name%.exe 2>>&1 temp
if errorlevel 1 (goto error)
%name%.exe
goto end
:error
type temp | more
pause
:end
POPD
并命名此类文件:(可能)compileit.cmd
然后通过以下方式执行:
cmd.exe /c compileit.cmd
在调用gcc
时,可以使用许多其他参数。
有关详细信息,请参阅:https://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html
创建批处理文件时,还有很多其他功能。
请参阅:http://ss64.com/nt/set.html了解详情
答案 1 :(得分:0)
检查%ERRORLEVEL%
比编译器输出更容易。并且不要在另一个窗口中start
编译器。
set name=code
set command1="path/to/the/file"
set command2=gcc -o %name%.exe %name%.c
cmd.exe /c "cd/d %command1% & %command2%"
if %ERRORLEVEL% equ 0 %command1%\%name%.exe
pause