嗨我是相当新的编码和我不能似乎能够逃脱使用^^!
一个感叹号。我知道我需要使用setlocal disabledelayedexpansion
或只使用endlocal
,但我找不到任何错误没有正确的位置。无法逃脱感叹号批处理文件
这里是我的脚本,它的目的是在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 a test
代替的This is a test!
。
你不需要'delayedexpansion' - 改变'''到'%'中:centertext'而失去了'endlocal' – Magoo
@Magoo批处理文件当我改变不会跑'! '''%',它只是崩溃 – VanZuron
@Magoo,由于嵌套扩展('!%1!'),实际上需要延迟扩展...... – aschipfl