[Batch] for /R y for /D

Iniciado por ‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡, 1 Marzo 2009, 12:51 PM

0 Miembros y 1 Visitante están viendo este tema.

‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

Hola, que tal: :D

Antes que nada, disculpen la pregunta tan basica, pero no he encontrado la respuesta...  :-[

Para que sirve for /R y for /D en batch?  :-[

He buscado en el foro y en google, pero he encontrado ejemplos o ejercicios usando tales metodos, mas no su uso. Si me pudieran ayudar, por favor?

De antemano, muchas gracias..

Un saludo  :D

0x0309

http://www.ss64.com/nt/for_d.html
http://www.ss64.com/nt/for_r.html

leogtz

Algunos ejemplos basicos :
@echo off
set /a contador=0
for /r %homedrive%\ %%. in (*) do (
set /a contador+=1
)
msg * Archivos = %contador%


for /r %homedrive%\ %%. in (*.doc) do (
echo.%%.
)


for /r %homedrive%\ %%. in (*.vbs *.doc *.txt *.exe) do (
echo.%%.
)


@echo off
msg * Carpetas
for /d /r "%homedrive%\" %%. in (*) do (
echo.%%.
)

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

Les agradezco su tiempo y la respuesta tan rapida  :D

Necesito leerlos con tiempo y hacer ejercicios.

Ya si tengo otra duda, los vuelvo a molestar  :P

Gracias. Saludos

‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

FOR /F ["options"] %%parameter IN (filenameset) DO command
FOR /F ["options"] %%parameter IN ("Text string to process") DO command

Sigo sin entenderlo
Como se usa delims, tokens y eol

Perdon pero tampoco entiendo que es %%.

0x0309

tengo un artículo exclusivo para una ezine que trata sobre el comando for, si quieres te lo facilito, pero con el compromiso de que no lo publiques en ninguna parte.

leogtz

Te dejaré algunos ejemplos :
@echo off
:: Mostrar Hola %username%
for /f "tokens=1,4" %%a in ("Hola Adios Bye %username%") do (
echo.%%a %%b
)
(
El tokens 1 : "Hola"
El tokens 4 : %username%
Si hubiera querido mostrar "Adios", hubiera usado el tokens 2


@echo off
:: Mostrar XP en Pantalla, con el comando Ver y For
for /f "tokens=3" %%* in ('ver ^| findstr /r /v "^$"') do (
echo.%%*
)
(
Puedes usar cualquier caracter en %% pero teniendo cuidado si es algun caracter especial.
Igual dentro de ^(^), debes de anteponer el acento circunflejo "^" si es un caracter especial.


Para ilustrar el uso de eol, supongamos que tenemos un archivo de texto (file.txt) con este contenido:

Agua
Sal
Leche
Cafe
:Soda
Cerveza


Y queremos mostrar solo las lineas que no contengan ":" al principio de la linea :

for /f "tokens=* eol=:" %%x in (file.txt) do (
echo.%%x
)


Salida :
Agua
Sal
Leche
Cafe
Cerveza

El eol por defecto omite las lineas que empiecen con ";", para quitar esto debe de especificarse :
"eol="

Tambien se habria mediante esto :
type "file.txt" | findstr /r /v "^:"

Pero no viene al caso.

El %% se usa en el comando For, en modo Script, en modo consola debe ser solo %, el %% puede ser precedido de cualquier caracter, pero teniendo en cuenta que si es un caracter especial, debe usarse ^ antes de dicho caracter.

Cualquier duda dices.

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

0x0309:
Prometido men  :-X  :-X  :-X
Y no te preocupes, de por si no soy chismoso ni "ojaldra"
Solo quiero seguir aprendiendo  :).

Te lo agradezco  :D
P.D. Mi correo esta a la vista de los foreros. Es el correo lo que necesitas?

Leo Gutierrez:
Igualmente gracias por tu tiempo y tu respuesta.

En estos momentos estoy haciendo ejercicios probando lo que me comentas, y por lo que veo, va a ser de mucha ayuda  :laugh:.

Gracias a ambos
Un saludo

‡‡‡ Ðξλ†Ћ Щλ†ζЋ ‡‡‡

Otra vez con unas dudas  :-[  :-\
(yo se que no se van a poner a darme clases, solo necesito que me digan si voy bien, por decir, ejemplo 1 es correcto, ejemplo 2 no es correcto)

Por ejemplo, en un archivo llamado x2.txt que contiene

A1 A2 A3 A4 A5 A6 A7
;B1 B2 B3 B4 B5 B6 B7
:C1 C2 C3 C4 C5 C6 C7
@D1 D2 D3 D4 D5 D6 D7

Con

Código (dos) [Seleccionar]

for /F "tokens=3* eol=" %%b in (x2.txt) do (
echo %%b %%c
)
Se tendrían que declarar 2 variables (%%b y %%c), por decirlo asi, una para el 3 y otra para *, cierto?

De igual forma, en

Código (dos) [Seleccionar]
for /F "tokens=2,4* eol=" %%b in (x2.txt) do (
echo %%b %%c %%d
)
Se tendrían que declarar ahora 3 variables (%%b, %%c y %%d), por decirlo asi, una para el 2, otra para el 4, y otra para *, estoy bien?

En

Código (dos) [Seleccionar]
for /F "tokens=2-5 eol=" %%b in (x2.txt) do (
echo %%b %%c %%d %%e
)
Para que se mostrarán los elementos del 2 al 5, se tendrían que declarar variables para 2, 3, 4 y 5, es correcto?

Por ultimo

Código (dos) [Seleccionar]
for /F "tokens=2-4* eol=" %%b in (x2.txt) do (
echo %%b %%c %%d %%e
)
La sintaxis mas facil sería 2* en lugar de 2-4*, pero igual con alguna variación pudiera aplicarse, por eso se los pregunto: serían necesarias todas esas variables para mostrar del 2 al 7?

Si escribo

Código (dos) [Seleccionar]
for /F "delims=2 eol=" %%b in (x2.txt) do (
echo %%b
)

Se muestra
A1 A
;B1 B
:C1 C
@D1 D
Esto es porque muestra hasta donde encuentra un 2, cierto?

Con

Código (dos) [Seleccionar]
for /F "delims=A eol=" %%b in (x2.txt) do (
echo %%b
)

Se muestra
1
;B1 B2 B3 B4 B5 B6 B7
:C1 C2 C3 C4 C5 C6 C7
@D1 D2 D3 D4 D5 D6 D7
Y aqui, porque si la primera linea empieza con A, porque mostró 1?

Disculpen tantas preguntas, pero creo que ya voy por menos, por lo menos en lo que es un conocimiento y uso basico de batch

leogtz

#9
Todo lo que planteas es correcto.
Citar
Se muestra
1
;B1 B2 B3 B4 B5 B6 B7
:C1 C2 C3 C4 C5 C6 C7
@D1 D2 D3 D4 D5 D6 D7
Y aqui, porque si la primera linea empieza con A, porque mostró 1?

Disculpen tantas preguntas, pero creo que ya voy por menos, por lo menos en lo que es un conocimiento y uso basico de batch

El contenido de tu archivo es :
A1 A2 A3 A4 A5 A6 A7
;B1 B2 B3 B4 B5 B6 B7
:C1 C2 C3 C4 C5 C6 C7
@D1 D2 D3 D4 D5 D6 D7


La primea linea :
A1 A2 A3 A4 A5 A6 A7


Con tu codigo, lo delimitas, es decir, pones el caracter 'A' como delimitador, por que solo mostró el 1?

Por que no especificaste que tokens usar, prueba esto :
for /F "delims=A tokens=* eol=" %%b in (x2.txt) do (
echo %%b
)

La salida :
1 A2 A3 A4 A5 A6 A7
B1 B2 B3 B4 B5 B6 B7
C1 C2 C3 C4 C5 C6 C7
D1 D2 D3 D4 D5 D6 D7


con el tokens=*, especificas que muestre todo, todo lo que esta despues del delimitador=A.

Espero y me haya entendido  :-\
Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com