¿Cómo puedo hacer que este archivo por lotes lea todas las unidades físicas y asignadas? Funciona bien con C: pero no leerá ninguna otra unidad.
@echo off
set filePath=
for /R c:\ /d %%a in (*) do if exist "%%a\FileName" set filePath=%%a& goto continue
:continue
if defined filePath echo %COMPUTERNAME% %username% yes >> \\server\%computername%.txt
Respuesta1
No existe una variable que simplemente contenga todas las letras asignadas.
si estás ejecutando como administrador,
unidades fsutil fsinfo
devuelve todas esas unidades: un fragmento de código de ejemplo:
FOR /F "usebackq tokens=1" %%a IN (`MOUNTVOL ^| FIND ":\"`) DO (FOR /F "usebackq tokens=3" %%b IN (`FSUTIL FSINFO DRIVETYPE %%a`) DO (IF /I "%%b" EQU "Removable" ECHO %%a ))
(juega con las salidas)
... si no es viable, tendrás que atravesarlos todos, es decir:
para %%i en (CDEFGHIJKLMNOPQRSTUVW XYZ) DO @if existe %%i: @echo %%i:
(probablemente debería omitir las letras esperadas de la unidad óptica/unidad de tarjeta de memoria).
VBS-scripting o Powershell son ideales para este tipo de cosas.
Respuesta2
if exist %%i
: no siempre funciona. Entonces también puedes verificar tus unidades de esta manera:
(dir %%i:>NUL) && (
echo Drive [%%i]: exist
) || (
echo Drive [%%i]: NOT exist
)
Espero que esto ayude