В разделе NTFS максимальная длина пути составляет около 32 760 символов (что немного меньше, чем 32 767). Но MAX-PATH все еще 260. Пути, более длинные, чем «MAX-PATH», по-прежнему доступны и называются "путь расширенной длины".
Согласно этой странице: ограничение максимальной длины пути
Чтобы указать путь расширенной длины, используйте "\\?\" префикс. Например, "\\?\D:\ очень длинный путь ".
Также имейте в виду, что "путь расширенной длины" всегда является "абсолютным" путем. Вы не можете указать "относительную форму" "расширенного пути".
Я не пытался запустить ваш точный сценарий, но я провел небольшое тестирование из командной строки, и кажется, что это работоспособно.
Например:
@for /f "usebackq delims=" %f in (`dir /s /b "\\?\c:\Blah"`) do @echo %f
Возвращает список как:
\\?\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
А также:
C:>dir /-c /a /w /s /x "\\?\c:\Blah" | findstr /b /c:" "
Возвращает:
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
Это не похоже на то, что вам нужно, поэтому вашей команде "dir/findstr" потребуется некоторая корректировка.
У меня нет путей \ файлов длиной более 260 символов, поэтому я не могу сказать, что происходит с "очень длинными" путями, но это должно работать.
Если используемый вами путь - это UNC-путь, то на странице, указанной выше, сказано следующее:
"\\?Префикс \"также можно использовать с путями, созданными в соответствии с универсальным соглашением об именах (UNC). Чтобы указать такой путь с помощью UNC, используйте "\\?\UNC \"префикс. Например,
«\\?\UNC \server \share ", где" server "- это имя компьютера, а" share "- это имя общей папки. Эти префиксы не используются как часть самого пути.
Пример, соответствующий пути UNC, который вы указали в комментарии, должен быть указан следующим образом:
dir /-c /a /w /s /x "\\?\UNC\10.0.0.10\folder1\folder2" | findstr /b /c:" "