Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проверка длинны пути в XP (http://forum.oszone.net/showthread.php?t=212852)

bombording 08-08-2011 16:53 1727994

Проверка длинны пути в XP
 
Добрый день.
Необходимы идеи в реализации скрипта, который будет сканировать папку И выдавать те пути к файлам которые больше 260 символов.


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


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

Iska 08-08-2011 17:03 1728001

bombording, такой формат:
Код:

\\?\Диск:[\Каталог][\Файл]
пробовали использовать?

Путь к файлу — Википедия

bombording 08-08-2011 17:12 1728010

Iska, по \\?\UNC\server\catalog\
не заходит на ресурс.

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

Foreigner 08-08-2011 17:12 1728012

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 1728017

Foreigner, А возможно в качестве переменной string задать директорию.

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

Foreigner 08-08-2011 17:22 1728021

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 1728047

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

SendMessage 08-08-2011 18:55 1728094

Код:

@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 1728148

Цитата:

Цитата bombording
Почему то не работает. Ставлю параметр gtr 10 echo %len%: %1
запускаю скрипт. Сканирование вроде бы идёт, но вот уже минут 5 как тишина..... »

Не знаю, на локальной папке работает.
Цитата:

Цитата bombording
скрипт не дружит с RU именами папок. »

Должен дружить. Если начальная папка кириллицей, то поставь в начале батника:
Код:

@echo off
1>nul chcp 1251
...


bombording 08-08-2011 22:38 1728239

Спасибо. Теперь всё работает.


Время: 22:59.

Время: 22:59.
© OSzone.net 2001-