Code: Select all
The system cannot find the batch label specified - Thing_d
Code: Select all
:Thing_%input%
I cannot seem to fix this, it only seems to happen when I open the batch file from command prompt.
Not sure if it is necessary, but here is the entire code:
Code: Select all
:setup
@echo off
setlocal enableDelayedExpansion
REM capture escape char for VT100
for /F %%a in ('echo prompt $E^| cmd') do set "ESC=%%a"
REM find out WinVer to see if vt100 escapes work
for /f "tokens=4 delims= " %%a in ('ver') do set j=%%a
set i=%j:~0,2%
if "%i%" == "10" set "isWinTen=true"
title Graphing Calculator by BatNoob
color 9f
mode 120,120
set "TAB= "
set ^"LF=^
^" Above empty line is required - do not remove
set ^"$n=^^^%LF%%LF%^%LF%%LF%^^"
pause
:menu
cls
echo ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ Û Û ÛÛÛÛÛ Û Û ÛÛÛÛÛ
echo Û Û Û Û Û Û Û Û Û Û ÛÛ Û Û
echo Û ÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ Û Û Û Û Û ÛÛÛ
echo Û Û Û Û Û Û Û Û Û Û Û ÛÛ Û Û
echo ÛÛÛÛÛ Û Û Û Û Û Û Û ÛÛÛÛÛ Û Û ÛÛÛÛÛ
echo/
echo ÛÛÛÛÛ ÛÛÛÛÛ ÛÛ ÛÛÛÛÛ Û Û ÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛ
echo Û Û Û Û Û Û Û Û Û Û Û Û Û Û Û ÛÛ
echo Û ÛÛÛÛÛ Û Û Û Û Û ÛÛÛÛÛ Û Û Û ÛÛÛÛÛ ÛÛ
echo Û Û Û Û Û Û Û Û Û Û Û Û Û Û Û
echo ÛÛÛÛÛ Û Û ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛ ÛÛÛÛÛ Û Û Û ÛÛÛÛÛ Û Û ÛÛ
echo/
echo/
set "op1=1. Graphing Calc "
set "op2=2. Options"
if exist "File.txt" (
for /f "tokens=1-2 delims=," %%t in (File.txt) do (
set "max=%%t"
color %%u
)
)
set "op3=3. Exit "
set "op4=4. Restart "
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo Û %op1%%TAB%Û
echo Û %op2%%TAB%%tab%Û
echo Û %op3%%TAB%%tab%Û
echo Û %op4%%TAB%%TAB%Û
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set "label="
for /f "eol=1 delims=" %%i in ('xcopy /lwq "%~f0" :\') do set "label=%%i"
set "label=Thing_!label:~-1!"
goto :%label%
exit /b
:Thing_4
start cmd /c %0
exit
goto :menu
:Thing_2
cls
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
echo Û 1. Size Û
echo Û 2. Color Û
echo Û 3. Clear Û
echo ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
set "key="
for /F "delims=" %%k in ('xcopy /W "%~F0" "%~F0" 2^>NUL') do if not defined key set "key=%%k"
for /F %%k in ("!key:~-1!") do (set nkey=%%k)
If !nkey! == 1 (
set /p "max=Size (1-58): "
) Else if !nkey! == 2 (
set /p "Col=Color: "
) else if "!nkey!" == "3" (
ERASE File.txt
goto :menu
) else (
set max=50
goto :Thing_2
)
if defined Col (color %Col%)
<nul set /p "=!max!" >File.txt
<nul set /p "=," >> File.txt
<nul set /p "=!Col!" >>File.txt
goto :menu
:Thing_3
exit
:Thing_1
cls
::*****************************************************************MAIN***********************************************************************************
::::::::::::::::::::::::::::::::::::::::::
::setting <tab> and <bs>
for /F %%a in ('echo prompt $H ^| cmd') do set "BS=%%a"
set "TAB= "
::
::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::
::set the math functions from https://www.dostips.com/forum/viewtopic.phpÛf=3&t=5819
set "Abs[x]=(((x)>>31|1)*(x))" & REM Absolute Value
set "Sign[x]=(x)>>31 | -(x)>>31 & 1" & REM Returns the sign of the number
set "AVG[xy]=(X&Y)+(X^Y)/2" & REM Average
:: they don't work to type in.
::::::::::::::::::::::::::::::::::::::::::
set "start=0" ::part of my improvised Do While Loop
If not defined max (set max=55)
set /a min=max*(-1)
set /a ymax=(!max!/2)-5
set /a ymin=(ymax * -1)
set /a nmax=2*!max!+2
if not defined char (set "char=2")
set "eq="
set/p "eq=Type equation, Put spaces between all characters: "
:::::::::::::::::::::::::::::::::::::::::::::Checking Validity::::::::::::::::::
set "check=%eq: =.%"
set fact=good
call :strlen len eq
::make sure that equation isn't too long for the "checker"
if %len% GTR 48 (set fact=bad)
:: make sure there are spaces
if !eq! == !check! (set fact=bad)
set "bad=A B C D E F G H I J K L M N O P Q R S T U V W Z"
:: Check if any of the "bad" chars are in the equation.
set "stop=False"
for %%a in (%eq%) do (
for %%A in (%bad%) do (
if /i "%%a" == "%%A" (set "stop=true")
)
)
:: go back to beginning if the equation is bad
if "!fact!"=="bad" (goto :Thing_1)
if "%stop%" == "true" (goto :Thing_1)
::make sure %eq% isn't empty and got though the "checker"
If "%eq%" == " " goto :Thing_1
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::Begin actual work
set "neq=!eq:x=((-1)*x)!" :: Graphing on both sides of the y axis
set "X=0"
set "Y=0"
set /a "nX=X* (-1)"
set /a "nY=Y* (-1)"
cls
::echo/
:call
Call :start & rem << to stop the random exiting that occurred whenever !X! was greater than !max!
pause
Call :ClearVars &REM reset the graph
goto :menu
:start
REM Goto loop Acting as a DO WHILE loop, is there something more efficientÛ
set /a "start=!start!+1"
if !start! GEQ 2 (set /a "X+=1")
set /a "Y=%eq%" & REM thanks to @aGerman and @Aacini for helping me with this.
set /a "nX=x*(-1)"
set /a "nY=%neq%"
if "!x!" NEQ "0" (if "!y!" neq "0" (if "!nx!" NEQ "0" (if "!ny!" neq "0" (set "char=Û")))) else (set "char=Û")
set !x!-!y!=!char!
set !nX!-!nY!=!char!
For /l %%a in (0 1 !nmax!) do (<nul set/p "=Û")
echo/
rem draw the graph.
for /l %%y in (!ymax! -1 !ymin!) do (
<nul set/p "=Û"
for /l %%x in (!min! 1 !max!) do (
If not defined %%x-%%y (
If "%%x" Neq "0" (
If "%%y" NEQ "0" (
set "%%x-%%y=Û"
) Else (
set "%%x-%%y=Û"
)
) Else (
set "%%x-%%y=Û"
)
) & rem if statement marks the axes
<nul set/p "=!%%x-%%y!"
)
echo Û%%y
)
For /l %%a in (0 1 !nmax!) do (<nul set/p "=Û")
echo/
set /a "nBSs=(!ymax!+5)*28"
set "BSs="
for /l %%# in (1 1 !nBSs!) do (set "BSs=!BSs!!BS!") & Rem <tab><bs><bs> method described by Aacini is faster than Timeout method,
:: also explained by Aacini
if %isWinTen% NEQ true (
echo %TAB%%BSs%@ 2>nul & Rem Moving cursor to screen home.
) else (
echo %ESC%[H & REM use vt100 escape sequences if isWinTen = true
)
If !nx! LSS !max! (
If !ny! LSS !ymax! (
If !nx! GTR !min! (
If !ny! GTR !ymin! (
REM Second half
If !X! LSS !max! (
If !Y! LSS !ymax! (
If !X! GTR !min! (
If !Y! GTR !ymin! (
goto :start &REM Troublesome if statement, first half works, but not the second
)
)
)
)
)
)
)
) Else (exit /b)
endlocal
::--------------------------------------------------Functions------------------------------------------------------------------------
goto :eof
:ColorText color text
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
set "DEL=%%a"
)
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof
:ClearVars
for /l %%y in (!ymax! -1 !ymin!) do (
for /l %%x in (!min! 1 !max!) do (
set "%%x-%%y="
)
)
exit /b
:strlen <resultVar> <stringVar>
(
setlocal EnableDelayedExpansion
set "s=!%~2!#"
set "len=0"
for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!s:~%%P,1!" NEQ "" (
set /a "len+=%%P"
set "s=!s:~%%P!"
)
)
)
(
endlocal
set "%~1=%len%"
exit /b
)