Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: corax en 17 Junio 2009, 16:49 pm



Título: [Batch] almacenar nombres de carpetas en variables (solucionado)
Publicado por: corax 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?  :-\


Título: Re: [Batch] almacenar nombres de carpetas en variables
Publicado por: Darioxhcx 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


Título: Re: [Batch] almacenar nombres de carpetas en variables
Publicado por: corax 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


Título: Re: [Batch] almacenar nombres de carpetas en variables
Publicado por: leogtz 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.



Título: Re: [Batch] almacenar nombres de carpetas en variables
Publicado por: corax 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.  :)


Título: Re: [Batch] almacenar nombres de carpetas en variables
Publicado por: leogtz 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.


Título: Re: [Batch] almacenar nombres de carpetas en variables
Publicado por: corax 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!