Solución:
Puede simplificar el proceso de eliminación a una línea. Por ejemplo, si tuviera una cadena como esta:
set string=hello!
y quería eliminar el “!” en él, solo puedo hacer
set string=%string:!=%
La cadena ahora tendrá el valor "hello"
en lugar de "hello!"
editar: Como señaló jeb en los comentarios, no se puede reemplazar "*"
usando este método. Esto es porque *
es un carácter comodín para la coincidencia de patrones de archivos por lotes (explicación brillante aquí). No sabía esto en el momento de publicar esta respuesta, ya que asumí que este método de reemplazo funcionaba para todas las cadenas de entrada. Si necesita reemplazar específicamente *
, Recomiendo seguir la respuesta de magoo. De lo contrario, mantendré esta respuesta para aquellos que necesiten una solución general, breve y de una sola línea para los reemplazos de cadenas por lotes.
@ECHO OFF
SETLOCAL
SET mystring=*10.31.*2.*65
:deaster
FOR /f "tokens=1* delims=*" %%i IN ("%mystring%") DO (
SET mystring=%%j
IF DEFINED mystring (
SET mystring=%%i%%j
GOTO deaster
) ELSE (
SET mystring=%%i
)
)
ECHO result=%mystring%=
No necesita un script completo para esto. Solo necesitas una for /f
círculo.
C:Usersrojo>set test=*10.*31.**2.*65
C:Usersrojo>echo %test%
*10.*31.**2.*65
C:Usersrojo>for /f "tokens=1-4 delims=.^*" %I in ("%test%") do @set test=%I.%J.%K.%L
C:Usersrojo>echo %test%
10.31.2.65
Si quieres poner el for
bucle en un script por lotes, use %%I
, %%J
, %%K
y %%L
en lugar de los porcentajes individuales.