Войти

Показать полную графическую версию : [решено] Проверка длинны пути в XP


bombording
08-08-2011, 16:53
Добрый день.
Необходимы идеи в реализации скрипта, который будет сканировать папку И выдавать те пути к файлам которые больше 260 символов.


Проблема в том что в XP есть ограничение на 260 символов в пути к файлу. Погуглив, пришёл к выводу что это ограничение никак не обойти....
Есть довольно большой ресурс, где необходимо выявить пути к файлам которые больше 260 символов....


Помогите пожалуйста.
Спасибо.

Iska
08-08-2011, 17:03
bombording, такой формат:
\\?\Диск:[\Каталог][\Файл]
пробовали использовать?

Путь к файлу — Википедия (http://ru.wikipedia.org/wiki/%D0%9F%D1%83%D1%82%D1%8C_%D0%BA_%D1%84%D0%B0%D0%B9%D0%BB%D1%83)

bombording
08-08-2011, 17:12
Iska, по \\?\UNC\server\catalog\
не заходит на ресурс.

А чем мне может помоч Long UNC вызов?

Foreigner
08-08-2011, 17:12
bombording,
Узнать длину строки:

@echo off
setlocal

set "string=C:\some folder\some folder\some folder\some folder\file.ext"
:loop

set "string=%string:~0,-1%" && set /a len+=1
if defined string goto:loop

if %len% gtr 260 (echo wrong path length: %len%) else (echo Ok: %len%)

bombording
08-08-2011, 17:16
Foreigner, А возможно в качестве переменной string задать директорию.

На ресурсе просто куча директорий и под директорий.

Foreigner
08-08-2011, 17:22
bombording,
Вариант для проверки в директории:

@echo off
setlocal

pushd "d:\Some Folder" || goto:eof
for /f "tokens=*" %%i in ('dir /b /s /a') do call:checklen "%%i"
popd
goto:eof

:checklen
set "string=%~1"

:loop
set "string=%string:~0,-1%" && set /a len+=1
if defined string goto:loop

if %len% gtr 260 echo %len%: %1

set "len="

bombording
08-08-2011, 17:53
Foreigner, Почему то не работает. Ставлю параметр gtr 10 echo %len%: %1
запускаю скрипт. Сканирование вроде бы идёт, но вот уже минут 5 как тишина..... Хотя в папке куча подпапок с длинной больше 10 символов. Мне так кажется скрипт не дружит с RU именами папок.

SendMessage
08-08-2011, 18:55
@echo off

setlocal enabledelayedexpansion

set "sdir=x:\folder"

for /f "delims=" %%a in ('dir %sdir% /b/s/a') do (
set "cdir=%%a"
if not "!cdir:~260,1!"=="" echo %%a
)

Foreigner
08-08-2011, 20:30
Почему то не работает. Ставлю параметр gtr 10 echo %len%: %1
запускаю скрипт. Сканирование вроде бы идёт, но вот уже минут 5 как тишина..... »
Не знаю, на локальной папке работает.
скрипт не дружит с RU именами папок. »
Должен дружить. Если начальная папка кириллицей, то поставь в начале батника:

@echo off
1>nul chcp 1251
...

bombording
08-08-2011, 22:38
Спасибо. Теперь всё работает.




© OSzone.net 2001-2012