ちょっと私はコーディングでかなり新しいです。^^!
を使用して感嘆符をエスケープできるようです。私は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'とバッチファイル@Magoo' endlocal' – Magoo
を失うことは実行されません! '%'にすると、ちょうどクラッシュする – VanZuron
@Magoo、ネストされた展開( '!%1!')のため遅延拡張が実際に必要です... – aschipfl