Ya hice la pregunta en el desbordamiento de la pila, pero no obtuve ninguna respuesta de nadie. Entonces estoy haciendo la misma pregunta aquí también.
Estoy tratando de hacer un programa que calcule el tamaño de todas las carpetas presentes en la ubicación especificada o la ubicación actual usando un script por lotes y lo estoy escribiendo en un archivo .csv
Seguí esta pregunta en stackoverflow
https://stackoverflow.com/questions/21711180/how-to-list-all-folder-with-size-via-batch-file
y mi código es
`@echo off
setlocal disabledelayedexpansion
set "folder=%~1"
Set "Value=0"
if not defined folder set "folder=%cd%"
(for /d %%a in ("%folder%\*") do (
set "size=0"
for /f "tokens=3,5" %%b in ('dir /-c /a /w /s /x "%%~fa\*" ^| findstr /b /c:" "')do if "%%~c"=="" set "size=%%~b"
setlocal enabledelayedexpansion
echo(%%~nxa , !size!
endlocal
))>>foldersize.csv
endlocal
exit /b`
Cuando ejecuto el código, recibo un error
El nombre del directorio "dir_name" es demasiado largo
Ya sabía que la longitud máxima para un nombre de ruta de Windows es de 260 caracteres y esa podría ser la razón de este error.
¿Hay alguna manera de resolver este problema?
Gracias de antemano por cada respuesta.
fuente
Respuestas:
En una partición NTFS, la longitud máxima de la ruta es de aproximadamente 32,760 caracteres (algo menos de 32,767). Pero, MAX-PATH sigue siendo 260. Las rutas más largas que "MAX-PATH" todavía son accesibles y se conocen como "ruta de longitud extendida".
Según esta página: Limitación máxima de la longitud del camino
También tenga en cuenta que una "ruta de longitud extendida" es siempre una ruta "absoluta". No puede especificar una "forma relativa" de una "ruta de longitud extendida".
No he intentado ejecutar su script exacto, pero he hecho algunas pruebas desde el símbolo del sistema y parece que es viable.
Por ejemplo:
Devuelve una lista como:
Y:
Devoluciones:
Lo cual no parece ser exactamente lo que necesita, por lo que su comando "dir / Findstr" necesitará algún ajuste.
No tengo ninguna ruta \ archivos que tengan más de 260 caracteres, por lo que no puedo decir qué sucede con las rutas "muy largas", pero debería funcionar.
Si la ruta que está utilizando es una ruta UNC, la página vinculada anteriormente dice esto:
Un ejemplo que se ajuste a la ruta UNC que proporcionó en su comentario, debe especificarse así:
fuente
"\\?\UNC\"
así:dir /-c /a /w /s /x "\\?\UNC\10.0.0.10\folder1\folder2" | findstr /b /c:" "
La única forma en que veo que funciona, suponiendo que el servidor físico que contiene la información no tiene ningún problema para acceder a las mismas carpetas, es asignar una letra de unidad a la carpeta donde comienza el proceso de recorrido del directorio, eliminando la dirección de la computadora y compartir el nombre de la longitud de la ruta.
fuente