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
Aby określić ścieżkę o przedłużonej długości, użyj przedrostka „\\? \”. Na przykład „\\? \ D: \ bardzo długa ścieżka”.
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:
@for /f "usebackq delims=" %f in (`dir /s /b "\\?\c:\Blah"`) do @echo %f
Zwraca listę taką jak:
\\?\c:\Blah\test
\\?\c:\Blah\test\aaa
\\?\c:\Blah\test\bbb
\\?\c:\Blah\test\aaa\folder1
\\?\c:\Blah\test\aaa\folder2
\\?\c:\Blah\test\aaa\folder1\File1.txt
\\?\c:\Blah\test\aaa\folder1\File2.txt
\\?\c:\Blah\test\aaa\folder2\File1.txt
\\?\c:\Blah\test\aaa\folder2\File2.txt
\\?\c:\Blah\test\bbb\folder1
\\?\c:\Blah\test\bbb\folder2
\\?\c:\Blah\test\bbb\folder1\Diff.txt
\\?\c:\Blah\test\bbb\folder1\Same.txt
\\?\c:\Blah\test\bbb\folder2\Diff.txt
\\?\c:\Blah\test\bbb\folder2\Same.txt
I:
C:>dir /-c /a /w /s /x "\\?\c:\Blah" | findstr /b /c:" "
Zwroty:
0 File(s) 0 bytes
0 File(s) 0 bytes
2 File(s) 660 bytes
2 File(s) 654 bytes
0 File(s) 0 bytes
2 File(s) 654 bytes
2 File(s) 660 bytes
Total Files Listed:
8 File(s) 2628 bytes
20 Dir(s) 3268722688 bytes free
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:
Prefiksu „\\? \” Można także używać ze ścieżkami zbudowanymi zgodnie z uniwersalną konwencją nazewnictwa (UNC). Aby określić taką ścieżkę za pomocą UNC, użyj prefiksu „\\? \ UNC \”. Na przykład
„\\? \ UNC \ server \ share”, gdzie „server” to nazwa komputera, a „share” to nazwa folderu udostępnionego. Te przedrostki nie są używane jako część samej ścieżki.
Przykład pasowania do ścieżki UNC podanej w komentarzu powinien zostać określony w następujący sposób:
dir /-c /a /w /s /x "\\?\UNC\10.0.0.10\folder1\folder2" | findstr /b /c:" "