Внимание
Информация о локали модифицируется во всем процессе, а не по каждому потоку отдельно. Если вы используете PHP на многопоточном сервере, таком как IIS, HHVM или Apache под Windows, вы можете обнаружить неожиданные изменения в настройках локали во время выполнения скриптов, никогда и не вызывавших setlocale(). Это происходит из-за того, что другие скрипты, запущенные в параллельных потоках данного процесса, в то же самое время поменяли настройки локали для всего процесса с помощью setlocale().
в windows очень маленький лимит на длину пути в 260 символов в функциях операции с файлам (по ссылке есть указания как можно убрать этот лимит и как написать приложение сее поддержкой)
есть совет, перемещать директории в пределах одного диска (если нет mount point внутри на другие диски) можно без необходимости в низ заглядывать, т.е. пишется скрипт который доходит до проблемного каталога и перемещает его по ближе к корню диска (можно скрипт .bat написать использовать команду move), при необходимости переименовав его, и так рекурсивно для всех, получится что все далекие каталоги переместятся в начало диска и там уже их можно удалить.
p.s. при использовании ntfs и fat32, при настройках по умолчанию, каждый файл или каталог с длинным именем (больше 8 символов и расширением больше 3) имеет второе специально сгенерированное короткое имя, вместо использования длинных имен можно использовать их, правда скрипт для этого будет сложнее но может так получиться что при их использовании лимит не будет достигнут, с короткими именами умеет работать FAR Commander, попробуй им удалить