Como posso fazer com que esse arquivo em lote leia todas as unidades físicas e mapeadas? Funciona bem com C: mas não lê nenhuma outra unidade.
@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
Responder1
Não há variável que simplesmente carregue todas as letras mapeadas.
se você estiver executando como administrador,
unidades fsutil fsinfo
retorna todas essas unidades - um exemplo de código:
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 ))
(brincar com as saídas)
... se não for viável, você terá que passar por todos eles, ou seja:
para %%i em (CDEFGHIJKLMNOPQRSTUVW XYZ) DO @if existir %%i: @echo %%i:
(provavelmente deve omitir as letras esperadas da unidade óptica/unidade do cartão de memória).
O script VBS ou Powershell é ideal para esse tipo de coisa.
Responder2
if exist %%i
: nem sempre funciona. Portanto, você também pode verificar suas unidades desta forma:
(dir %%i:>NUL) && (
echo Drive [%%i]: exist
) || (
echo Drive [%%i]: NOT exist
)
Espero que isto ajude