[OT]BAT, obtener subcadenas dentro de una cadena

04/02/2005 - 23:43 por F | Informe spam
Hola, estoy programando un BAT y me encuentro en un problema

Tengo una linea de tipo "TEXTO1 espacio TEXTO2 espacio TEXTO3", y me
buscaria extraer y poner en una variable el texto2, en linux lo haria con
"cut", pero no encuentro nada similar para el xp. alguien sabe como hacerlo
(extraer una cadena de texto en una linea con varios items, separados por
espacios?)

Un saludoi y gracias

Preguntas similare

Leer las respuestas

#1 JM Tella Llop [MVP Windows]
04/02/2005 - 23:56 | Informe spam
No te entiendo

¿quieres sustituir o quitar texto2? Muy facil:

set var=texto1 texto2 texto3

set nuevovar=%var:texto2=cambiado%

lo anterior cambia texto2 por la palabra "cambiado"

¿quiere eliminarlo?:

set nuevovar=%var:texto2=%

¿quieres el substring?

set nuevovar=%var:~7,6%

facil :-)

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase,
y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.



"F" wrote in message
news:e5%
Hola, estoy programando un BAT y me encuentro en un problema

Tengo una linea de tipo "TEXTO1 espacio TEXTO2 espacio TEXTO3", y me
buscaria extraer y poner en una variable el texto2, en linux lo haria
con "cut", pero no encuentro nada similar para el xp. alguien sabe
como hacerlo (extraer una cadena de texto en una linea con varios
items, separados por espacios?)

Un saludoi y gracias

Respuesta Responder a este mensaje
#2 JM Tella Llop [MVP Windows]
05/02/2005 - 00:07 | Informe spam
si lo que quieres es una variable que contiene cadenas y espacios en
blanco y quuieres cortar por los espacion en blanco:

@echo off
set var=texto1 texto23 texto2556

call :a00 %var%
REM resto del script
goto :EOF

:a00
if {%1}=={} goto :EOF
echo %1
shift
goto :a00


Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase,
y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.



"JM Tella Llop [MVP Windows]" wrote in message
news:%
No te entiendo

¿quieres sustituir o quitar texto2? Muy facil:

set var=texto1 texto2 texto3

set nuevovar=%var:texto2=cambiado%

lo anterior cambia texto2 por la palabra "cambiado"

¿quiere eliminarlo?:

set nuevovar=%var:texto2=%

¿quieres el substring?

set nuevovar=%var:~7,6%

facil :-)

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna
clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.



"F" wrote in message
news:e5%
Hola, estoy programando un BAT y me encuentro en un problema

Tengo una linea de tipo "TEXTO1 espacio TEXTO2 espacio TEXTO3", y me
buscaria extraer y poner en una variable el texto2, en linux lo haria
con "cut", pero no encuentro nada similar para el xp. alguien sabe
como hacerlo (extraer una cadena de texto en una linea con varios
items, separados por espacios?)

Un saludoi y gracias




Respuesta Responder a este mensaje
#3 JM Tella Llop [MVP Windows]
05/02/2005 - 00:18 | Informe spam
Ahora bien cuidado si vas a usar esto dentro de "if" o de bucles
"for" ya que tiene que permitir la expansion de variables.

Es decir, al inicio del script hay que poner:

setlocal enabledelayedexpansion

y en vez de usar dentro de los for, los substring o variables
delimitados por %, es decir %var%, debes referenciarlos como !var!
(delimitados por admiraciones en vez de por %

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase,
y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.



"JM Tella Llop [MVP Windows]" wrote in message
news:
si lo que quieres es una variable que contiene cadenas y espacios en
blanco y quuieres cortar por los espacion en blanco:

@echo off
set var=texto1 texto23 texto2556

call :a00 %var%
REM resto del script
goto :EOF

:a00
if {%1}=={} goto :EOF
echo %1
shift
goto :a00


Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna
clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.



"JM Tella Llop [MVP Windows]" wrote in message
news:%
No te entiendo

¿quieres sustituir o quitar texto2? Muy facil:

set var=texto1 texto2 texto3

set nuevovar=%var:texto2=cambiado%

lo anterior cambia texto2 por la palabra "cambiado"

¿quiere eliminarlo?:

set nuevovar=%var:texto2=%

¿quieres el substring?

set nuevovar=%var:~7,6%

facil :-)

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna
clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.



"F" wrote in message
news:e5%
Hola, estoy programando un BAT y me encuentro en un problema

Tengo una linea de tipo "TEXTO1 espacio TEXTO2 espacio TEXTO3", y me
buscaria extraer y poner en una variable el texto2, en linux lo
haria con "cut", pero no encuentro nada similar para el xp. alguien
sabe como hacerlo (extraer una cadena de texto en una linea con
varios items, separados por espacios?)

Un saludoi y gracias







Respuesta Responder a este mensaje
#4 F
05/02/2005 - 00:31 | Informe spam
Gracias, mas o menos es esto lo que quiera, tengo una variable que contiene
cadenas y espacios en blanco, y necesito el segundo campo (es decir la
segunda subcadena), pero ya me areglo yo arreglando el .bat. que quedaria
mas o menos asi:

@echo off
set nombre=fulano detal

call :a00 %nombre%
REM resto del script
echo su apellido es %ip%
goto :FIN

:a00
shift
set ip=%1

:FIN
pause


¡Pero me has hecho surguir nuevas dudas!

1ºUna de ellas, es por que vuelve la despues del CALL, al punto que lo
llamo, eso me ha dejado perplejo (hice una primera prueba donde yo le hacia
volver con un goto, y me imprima el mensaje dos veces, despues lo quite, y
realmente retorna despues del call), lo que quiero decir, es que intuto que
:a00 al llamarlo con el call es algo como un funcion, pero si no hay ningun
punto de retorno (estilo return o ret, algo asi), ¿como sabe que a acabado
la funcion que debe volver? :-O

2º si en vez de terner la variable asi set nombre=fulano detal, la tengo asi
set nombre=fulano,detal (es decir separados los campos con una " , ") como
separaria los campos.

muchas gracias (y por el otro mensaje tb, que es muy util)

Un saludo




"JM Tella Llop [MVP Windows]" escribió en el mensaje
news:
si lo que quieres es una variable que contiene cadenas y espacios en
blanco y quuieres cortar por los espacion en blanco:

@echo off
set var=texto1 texto23 texto2556

call :a00 %var%
REM resto del script
goto :EOF

:a00
if {%1}=={} goto :EOF
echo %1
shift
goto :a00


Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y
no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.



"JM Tella Llop [MVP Windows]" wrote in message
news:%
No te entiendo

¿quieres sustituir o quitar texto2? Muy facil:

set var=texto1 texto2 texto3

set nuevovar=%var:texto2=cambiado%

lo anterior cambia texto2 por la palabra "cambiado"

¿quiere eliminarlo?:

set nuevovar=%var:texto2=%

¿quieres el substring?

set nuevovar=%var:~7,6%

facil :-)

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase, y
no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.



"F" wrote in message
news:e5%
Hola, estoy programando un BAT y me encuentro en un problema

Tengo una linea de tipo "TEXTO1 espacio TEXTO2 espacio TEXTO3", y me
buscaria extraer y poner en una variable el texto2, en linux lo haria
con "cut", pero no encuentro nada similar para el xp. alguien sabe como
hacerlo (extraer una cadena de texto en una linea con varios items,
separados por espacios?)

Un saludoi y gracias







Respuesta Responder a este mensaje
#5 JM Tella Llop [MVP Windows]
05/02/2005 - 00:37 | Informe spam
Y mucho mas elegante, usando "arrays". (que tambien se puede :-)

@echo off
set var=texto1 texto23 texto2556

set /a i=0
call :a00 %var%

REM -- obtener el elemento 2 del array:

echo elemento 2 = %array_2_%

REM -- referenciar todo el array (en este caso es igual a var

echo todo el array (sacara una linea por elemento)
set array_

REM resto del script
goto :EOF


REM --
:a00
if {%1}=={} goto :EOF
set /a i=i+1
set array_%i%_=%1
shift
goto :a00

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna clase,
y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.



"F" wrote in message
news:
Gracias, mas o menos es esto lo que quiera, tengo una variable que
contiene cadenas y espacios en blanco, y necesito el segundo campo (es
decir la segunda subcadena), pero ya me areglo yo arreglando el .bat.
que quedaria mas o menos asi:

@echo off
set nombre=fulano detal

call :a00 %nombre%
REM resto del script
echo su apellido es %ip%
goto :FIN

:a00
shift
set ip=%1

:FIN
pause


¡Pero me has hecho surguir nuevas dudas!

1ºUna de ellas, es por que vuelve la despues del CALL, al punto que lo
llamo, eso me ha dejado perplejo (hice una primera prueba donde yo le
hacia volver con un goto, y me imprima el mensaje dos veces, despues
lo quite, y realmente retorna despues del call), lo que quiero decir,
es que intuto que :a00 al llamarlo con el call es algo como un
funcion, pero si no hay ningun punto de retorno (estilo return o ret,
algo asi), ¿como sabe que a acabado la funcion que debe volver? :-O

2º si en vez de terner la variable asi set nombre=fulano detal, la
tengo asi set nombre=fulano,detal (es decir separados los campos con
una " , ") como separaria los campos.

muchas gracias (y por el otro mensaje tb, que es muy util)

Un saludo




"JM Tella Llop [MVP Windows]" escribió en el
mensaje news:
si lo que quieres es una variable que contiene cadenas y espacios en
blanco y quuieres cortar por los espacion en blanco:

@echo off
set var=texto1 texto23 texto2556

call :a00 %var%
REM resto del script
goto :EOF

:a00
if {%1}=={} goto :EOF
echo %1
shift
goto :a00


Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna
clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.



"JM Tella Llop [MVP Windows]" wrote in message
news:%
No te entiendo

¿quieres sustituir o quitar texto2? Muy facil:

set var=texto1 texto2 texto3

set nuevovar=%var:texto2=cambiado%

lo anterior cambia texto2 por la palabra "cambiado"

¿quiere eliminarlo?:

set nuevovar=%var:texto2=%

¿quieres el substring?

set nuevovar=%var:~7,6%

facil :-)

Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm

Este mensaje se proporciona "como está" sin garantías de ninguna
clase, y no otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.



"F" wrote in message
news:e5%
Hola, estoy programando un BAT y me encuentro en un problema

Tengo una linea de tipo "TEXTO1 espacio TEXTO2 espacio TEXTO3", y
me buscaria extraer y poner en una variable el texto2, en linux lo
haria con "cut", pero no encuentro nada similar para el xp. alguien
sabe como hacerlo (extraer una cadena de texto en una linea con
varios items, separados por espacios?)

Un saludoi y gracias











Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida