Если вы пытаетесь удалить определенные символы или символы из строки, мы можем использовать findstr
с переключателем /V
на , исключая эти переменные из оператора.
Проблема с этим заключается в том, что он увидит персонажа в зачете и удалит все это вместе.Чтобы обойти это, ряд статистических данных может разбить строку и программно создать цепочку команд findstar для автоматического запрета нужных вам персонажей.
Например, нижеприведенная команда будет брать символы из A,B,C,D
отформатируйте и создайте строку ^| find /V "A"
+ ^| find /V "B"
+ ^| find /V "C"
+ ^| find /V "D"
для каждого символа "Banned".
for /F "delims=" %%a in ("%BAN%") do (
set "output="
for /F "delims=" %%b in ('cmd /U /C echo %%a^| find /V ","^| find /V "*"') do (
set "output=!output! | find /V "%%b""
)
set "B1=!output:~1!"
)
Здесь мы можем использовать эти данные и ввести их вдругой для утверждения, чтобы исключить тех, кто в findstr /V
.Помните, что каждый блок разбивает каждый символ в отдельной строке для последующего добавления в один символ в этом блоке.
Весь этот процесс можно вызвать с помощью оператора call
с %1
.В моем решении все, что вам нужно сделать, это использовать CALL :FIX (STRING NAME)
, и он пройдет, удалит запрещенные символы и изменит эту строку, чтобы не было этих символов.
@ECHO OFF
setlocal EnableDelayedExpansion
rem | Banned character List (Must be in A,B,C format)
set "BAN=m,1,4,)"
rem | TEST strings we want to remove symbols from (Can be any name)
SET "STRING1=H$4jm)k@14+d^j"
SET "STRING2=money"
rem | Use (CALL) (:FIX) (STRING NAME)
echo BEFORE FIX: %STRING1%
call :FIX STRING1
echo AFTER FIX: %STRING1%
pause
goto :eof
:FIX
Rem | Create %1 into raw string & string data
set "VAR1=%1"
Rem | Create a Findstr for each banned character
for /F "delims=" %%a in ("%BAN%") do (
set "output="
for /F "delims=" %%b in ('cmd /U /C echo %%a^| find /V ","') do (
set "output=!output! | find /V "%%b""
)
set "B1=!output:~1!"
)
Rem | Edit string without banned words
for /F "delims=" %%a in ("!%VAR1%!") do (
set "output="
for /F "delims=" %%b in ('cmd /U /C echo %%a^| find /V ""!B1!') do (
set "output=!output! %%b"
)
set "B2=!output:~1!"
)
Rem | Remove spaces & finish
set %VAR1%=!B2: =%!
goto :eof