Zadałem już pytanie w przepełnieniu stosu, ale nie otrzymałem żadnej odpowiedzi od nikogo. Zadaję tutaj to samo pytanie.
Usiłuję stworzyć program, który obliczy rozmiar wszystkich folderów obecnych w określonej lokalizacji lub bieżącej lokalizacji za pomocą skryptu wsadowego i zapisuję go w pliku .csv
Podążyłem za tym pytaniem w przepełnieniu stosu
https://stackoverflow.com/questions/21711180/how-to-list-all-folder-with-size-via-batch-file
a mój kod to
`@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`
Po uruchomieniu kodu pojawia się błąd
Nazwa katalogu „nazwa_katalogu” jest za długa
Wiedziałem już, że maksymalna długość nazwy ścieżki systemu Windows wynosi 260 znaków i może to być przyczyną tego błędu.
Czy jest jakiś sposób, aby rozwiązać ten problem?
Z góry dziękuję za każdą odpowiedź.
windows
batch-file
ajith
źródło
źródło
Odpowiedzi:
Na partycji NTFS maksymalna długość ścieżki wynosi około 32 760 znaków (coś nieco mniej niż 32 767). Ale MAX-PATH ma nadal 260. Ścieżki dłuższe niż „MAX-PATH” są nadal dostępne i są nazywane „ścieżką o przedłużonej długości”.
Zgodnie z tą stroną: Ograniczenie maksymalnej długości ścieżki
Należy również pamiętać, że „ścieżka o przedłużonej długości” jest zawsze ścieżką „absolutną”. Nie można określić „formy względnej” „ścieżki o przedłużonej długości”.
Nie próbowałem uruchomić dokładnego skryptu, ale wykonałem trochę testów z wiersza polecenia i wygląda na to, że jest wykonalny.
Na przykład:
Zwraca listę taką jak:
I:
Zwroty:
Co nie wygląda na to, że jest dokładnie to, czego potrzebujesz, więc twoje polecenie „dir / findstr” będzie wymagało pewnej korekty.
Nie mam żadnych ścieżek \ plików zawierających więcej niż 260 znaków, więc nie mogę powiedzieć, co się dzieje z „bardzo długimi” ścieżkami, ale powinno działać.
Jeśli ścieżka, której używasz, jest ścieżką UNC, strona, do której prowadzi link, mówi:
Przykład pasowania do ścieżki UNC podanej w komentarzu powinien zostać określony w następujący sposób:
źródło
"\\?\UNC\"
ten sposób:dir /-c /a /w /s /x "\\?\UNC\10.0.0.10\folder1\folder2" | findstr /b /c:" "
Jedyny sposób, w jaki widzę, aby działał, zakładając, że fizyczny serwer przechowujący informacje nie ma problemu z dostępem do tych samych folderów, polega na zamapowaniu litery dysku na folder, w którym rozpoczyna się proces przejścia do katalogu, usuwając adres komputera i udostępnij nazwę z długości ścieżki.
źródło