Cannot escape exclamation mark in batch file

Hey guys, I'm pretty new to coding, and I can't seem to escape the exclamation mark using ^^!. I know that I need to either use setlocal disabledelayedexpansionor just use endlocal, but I cannot find the right place to put it without getting any errors.

Here is my script designed to display text in the horizontal center of the window cmd:

@echo off
setlocal enabledelayedexpansion
title Center Text
mode 80,50

set "cmdwidth=80"
:Display
cls
set Center=This is a test^^! & call :CenterText Center strLen
echo.
pause
exit

:CenterText
  if not "!%1:~%len%!"=="" set /A len+=1 & goto :CenterText
(endlocal & set %2=%len%)

goto CenterTextDisplay
:AddSpace
set "spaces=%spaces% "
goto :eof
:CenterTextDisplay
set /a "indent=(cmdwidth - strLen)/2" 
set "spaces= "
for /l %%a in (1,1,%indent%) do call :AddSpace
echo %spaces%%Center%
set "len=0"
goto :eof

This is my code without errors, but I cannot escape the exclamation mark correctly, the result is This is a testinstead This is a test!.

+4
source share
1 answer

( ) , , , ( %), ; for (, %%I) (, %1), , .
, , .

. Center , , , %Center% echo %spaces%%Center%.

script:

@echo off
setlocal DisableDelayedExpansion
title Center Text
mode 80,50

set "cmdwidth=80"
:Display
cls
set "Center=This is a test!" & call :CenterText Center strLen
echo/
pause
endlocal
exit /B

:CenterText
setlocal EnableDelayedExpansion
:CenterText_Loop
if not "!%~1:~%len%!"=="" set /A len+=1 & goto :CenterText_Loop
endlocal & set "%~2=%len%"
set /a "indent=(cmdwidth-strLen)/2" 
set "spaces= "
for /l %%a in (1,1,%indent%) do call :AddSpace
echo(%spaces%%Center%
set "len=0"
goto :eof

:AddSpace
set "spaces=%spaces% "
goto :eof

, :

  • exit exit /B script, cmd ;
  • echo. echo/, , - echo ( ) ;
  • set ;
  • %1 %~1 %2 %~2, ;
  • :AddSpace , :CenterTextDisplay goto; , for /l %%a in (1,1,%indent%) do call :AddSpace :

    for /l %%a in (1,1,%indent%) do call set "spaces=%%spaces%% "
    

    : % call; , - , (, for if) call;

+2

Source: https://habr.com/ru/post/1657895/


All Articles