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? :-\
cd %homedrive%
for /d %%x in ( * ) do echo %%x
fijate si asi te sirve
do set %%x=%contador?%
suerte
un saludo
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
A ver, suponiendo que estamos en la ruta:
X:\documents and settings
Y queremos almacenar las carpetas en variables por separado:
@echo off
cd /d "%homedrive%\documents and settings"
setlocal enabledelayedexpansion
for /f "tokens=*" %%_ in ('dir /b /ad') do (
set /a "contador+=1"
set "linea!contador!=%%~dpn_"
)
set linea
pause>nul
exit /b 0
Salida:
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.
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):
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. :)
Puedes acceder a las carpetas asi:
!linea1!
!linea2!
...
ó así:
%linea1%
Puedes hacer lo que quieras con ellas, lo que harías normalmente con cualquier variable.
CitarPor 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:\>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.
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!