Показать полную графическую версию : [решено] Проверка длинны пути в XP
bombording
08-08-2011, 16:53
Добрый день.
Необходимы идеи в реализации скрипта, который будет сканировать папку И выдавать те пути к файлам которые больше 260 символов.
Проблема в том что в XP есть ограничение на 260 символов в пути к файлу. Погуглив, пришёл к выводу что это ограничение никак не обойти....
Есть довольно большой ресурс, где необходимо выявить пути к файлам которые больше 260 символов....
Помогите пожалуйста.
Спасибо.
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.