elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch] almacenar nombres de carpetas en variables (solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Batch] almacenar nombres de carpetas en variables (solucionado)  (Leído 15,007 veces)
corax

Desconectado Desconectado

Mensajes: 220


Primum non nocere


Ver Perfil
[Batch] almacenar nombres de carpetas en variables (solucionado)
« en: 17 Junio 2009, 16:49 pm »

buenas a todos

necesito hacer un fragmento de código en batch que busque los nombres de las carpetas (solo las carpetas, sin contar las subcarpetas), de la unidad que se le indique, y que almacene cada nombre en una variable para poder trabajar con ellas más adelante

después de pasarme un buen rato intentando hacerlo sin éxito al final me he quedado sin ideas, ¿a alguien se le ocurre algo?  :-\


« Última modificación: 19 Junio 2009, 12:20 pm por corax » En línea

Nuestro idioma ha tardado 12 siglos en llegar hasta hoy día. Tú tan sólo tardas 20 segundos en escribir un post: no destroces en tan poco tiempo lo que tantos siglos ha costado crear.
Darioxhcx


Desconectado Desconectado

Mensajes: 2.294


Ver Perfil
Re: [Batch] almacenar nombres de carpetas en variables
« Respuesta #1 en: 17 Junio 2009, 17:36 pm »

cd %homedrive%
for /d %%x in ( * ) do echo %%x

fijate si asi te sirve

do set %%x=%contador?%

suerte
un saludo


En línea

corax

Desconectado Desconectado

Mensajes: 220


Primum non nocere


Ver Perfil
Re: [Batch] almacenar nombres de carpetas en variables
« Respuesta #2 en: 17 Junio 2009, 18:11 pm »

sí, me ha sevido... en parte, gracias Dario  :)

el código reconoce los nombres de las carpetas que están en "%homedrive%\", el problema viene cuando intento guardar cada nombre como una variable distinta para usarlas posteriormente en el código

lo que puedo hacer con eso es almacenar los nombres en un archivo de texto y hacer un código que lea cada línea, pero me gustaría poder ahorrarme el paso intermedio, es decir, en vez de escribir los nombres de la carpeta en un archivo de texto, leer el archivo y asignar cada línea a una variable, me gustaría poder asignar directamente cada nombre a una variable, y ahí ya sí que no tengo ni idea de como hacerlo, que es el principal problema
En línea

Nuestro idioma ha tardado 12 siglos en llegar hasta hoy día. Tú tan sólo tardas 20 segundos en escribir un post: no destroces en tan poco tiempo lo que tantos siglos ha costado crear.
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Batch] almacenar nombres de carpetas en variables
« Respuesta #3 en: 18 Junio 2009, 06:13 am »

A ver, suponiendo que estamos en la ruta:
Código:
X:\documents and settings

Y queremos almacenar las carpetas en variables por separado:
Código
  1. @echo off
  2. cd /d "%homedrive%\documents and settings"
  3. setlocal enabledelayedexpansion
  4. for /f "tokens=*" %%_ in ('dir /b /ad') do (
  5. set /a "contador+=1"
  6. set "linea!contador!=% style="color: #448888;">%~dpn_"
  7. )
  8. set linea
  9. pause>nul
  10. exit /b 0
Salida:
Código:
linea1=C:\Documents and Settings\Administrador
linea2=C:\Documents and Settings\All Users
linea3=C:\Documents and Settings\Default User
linea4=C:\Documents and Settings\LocalService
linea5=C:\Documents and Settings\NetworkService
Ya puedes darle el uso que quieras a las variables.

En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
corax

Desconectado Desconectado

Mensajes: 220


Primum non nocere


Ver Perfil
Re: [Batch] almacenar nombres de carpetas en variables
« Respuesta #4 en: 18 Junio 2009, 15:21 pm »

Muchas gracias Leo  :)

Solo me queda una duda, que seguro que es una tontería, pero no acabo de entender:
este código muestra por pantalla al ejecutarse estas líneas de texto (en tu caso):
Código:

linea1=C:\Documents and Settings\Administrador
linea2=C:\Documents and Settings\All Users
linea3=C:\Documents and Settings\Default User
linea4=C:\Documents and Settings\LocalService
linea5=C:\Documents and Settings\NetworkService

Si yo quisiera por ejemplo cambiar de nombre la primera carpeta, o moverla, o quisiera hacerlo con la segunda... ¿cómo debería hacerlo? :-\
Es decir, ¿sería algo como ren "%homedrive%\documents and settings\%variable1% NuevoNombre"?

Por otra parte, ¿qué debo hacer para que no se muestre por pantalla la información? Es un código para automatización de tareas, por lo que intento que el usuario solo tenga que interactuar con el bat en caso de estricta necesidad.

Una vez más, gracias por tu tiempo.  :)
« Última modificación: 19 Junio 2009, 02:03 am por Leo Gutierrez. » En línea

Nuestro idioma ha tardado 12 siglos en llegar hasta hoy día. Tú tan sólo tardas 20 segundos en escribir un post: no destroces en tan poco tiempo lo que tantos siglos ha costado crear.
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Batch] almacenar nombres de carpetas en variables
« Respuesta #5 en: 19 Junio 2009, 02:08 am »

Puedes acceder a las carpetas asi:
Código:
!linea1!
!linea2!
...
ó así:
Código:
%linea1%

Puedes hacer lo que quieras con ellas, lo que harías normalmente con cualquier variable.

Citar
Por otra parte, ¿qué debo hacer para que no se muestre por pantalla la información? Es un código para automatización de tareas, por lo que intento que el usuario solo tenga que interactuar con el bat en caso de estricta necesidad.

Para evitar que se visualice información, puedes redirigir la salida a NULL:
Ejemplo:
Código:
C:\>taskkill -f -im notepad.exe
Correcto: se terminó el proceso "notepad.exe" con PID 2340.

C:\>notepad

C:\>taskkill -f -im notepad.exe > nul 2>&1

C:\>

Saludos.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
corax

Desconectado Desconectado

Mensajes: 220


Primum non nocere


Ver Perfil
Re: [Batch] almacenar nombres de carpetas en variables
« Respuesta #6 en: 19 Junio 2009, 12:20 pm »

Muchísimas gracias, Leo  :)
El código es justo lo que andaba buscando.

En cuanto a lo de que no muestre información por pantalla, me refería a que no mostrase lo de

linea1=C:\Documents and Settings\Administrador
linea2=C:\Documents and Settings\All Users

etc, pero ya he conseguido hacerlo  :)

Otra vez, muchas gracias!
En línea

Nuestro idioma ha tardado 12 siglos en llegar hasta hoy día. Tú tan sólo tardas 20 segundos en escribir un post: no destroces en tan poco tiempo lo que tantos siglos ha costado crear.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[batch]unir dos o mas variables en una sola [Solucionado]
Scripting
z_ane_666 3 17,881 Último mensaje 3 Enero 2011, 22:32 pm
por klaine
[BATCH] asignar variables con set desde un for /f[Solucionado]
Scripting
haveavigar 5 7,233 Último mensaje 14 Enero 2011, 20:31 pm
por leogtz
[BATCH](SOLUCIONADO)Disminuir nombres repetidos a 1 solo « 1 2 »
Scripting
FranciskoAsdf 13 11,661 Último mensaje 29 Diciembre 2011, 18:07 pm
por Turrete
(Solucionado) [ Batch ] - Problema matemático con variables...
Scripting
Eleкtro 4 5,704 Último mensaje 11 Noviembre 2011, 20:17 pm
por Eleкtro
conflictos de nombres de variables
Programación C/C++
jacy11 8 5,782 Último mensaje 27 Noviembre 2011, 19:46 pm
por jacy11
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines