Имя файла слишком длинное для копирования, но не указано, какой именно

Имя файла слишком длинное для копирования, но не указано, какой именно

Я копировал кучу файлов, но не смог скопировать некоторые, потому что их имя было слишком длинным. Есть ли простой способ сократить имена или я могу хотя бы узнать путь, где имя файла становится слишком длинным?

EDIT: под кучей файлов я подразумеваю, что есть два каталога, каждый из которых содержит файлы, и еще несколько каталогов, содержащих еще файлы и т. д. Я просто копирую с помощью ctrl+c

решение1

Вы можете использоватьСканер путичтобы найти проблемные файлы. (Прокрутите вниз до Old Path Scanner)

решение2

Я бы предложилРобокопия, встроенный Windows 7.

robocopy <Source> <Destination> [<File>[ ...]] [<Options>]

решение3

Если вас устраивает решение с командной строкой, то cpутилита, которую я включаю в комплект,Корпус Hamilton Cлегко скопирует ваши файлы без необходимости что-либо сокращать. (Полное раскрытие информации: я автор.) Как и остальные мои основные файловые утилиты, он используетдлинные имена файлов Unicodeдля внутренней поддержки длины пути до 32 тыс. символов, что является системным ограничением.

Если это одноразовая вещь (а возможно даже и нет), все, что вам нужно, этобесплатная версияДайте мне знать, если возникнут проблемы или вам понадобится помощь в том, чтобы заставить его работать так, как вам нужно.

решение4

Чтобы решить эту проблему, вам нужно найти проблемные файлы, где полный путь и имя файла больше 255 символов. Поскольку поиск длины в пакетном файле — это своего рода собачий обед, я использую следующий VBScript.

Сохраните код ниже в файл с именем longpaths.vbs. Запустите его из командной строки DOS со следующим, cscript longpaths.vbs <path> <length>где <path>— расположение папки (не забудьте заключить ее в кавычки, если у вас есть пробел), а <length>— длина пути, при превышении которого следует пометить.

Код выглядит следующим образом:

Option Explicit
If WScript.Arguments.Count <> 2 Then
    WScript.Echo "Usage: " & WScript.ScriptName & " <path> <max length>"
    WScript.Quit
End If
Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(WScript.Arguments(0)) = False Then
    WScript.Echo WScript.Arguments(0) & " - Invalid path or no such folder."
    WScript.Quit
End If
Dim oFolder : Set oFolder = fso.GetFolder(WScript.Arguments(0))
Dim iLength : iLength = CInt(WScript.Arguments(1))
Dim iCount : iCount = 0
WScript.Echo "Looking for paths longer than " & iLength & " characters in " & oFolder.Path
On Error Resume Next
Call ScanFolder(oFolder)
On Error Goto 0
WScript.Echo "Found " & iCount & "."
WScript.Quit
Sub ScanFolder(oScanFolder)
    Dim oFile : For Each oFile in oScanFolder.Files
        If Len(oFile.Path) > iLength Then
            WScript.Echo oFile.Path
            iCount = iCount + 1
        End If
    Next
    For Each oFile in oScanFolder.SubFolders
        Call ScanFolder(oFile)
    Next
End Sub

Пример использования и вывода:

D:\Development>cscript longpath.vbs c:\Windows 210
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

Looking for paths longer than 210 characters in C:\Windows
C:\Windows\assembly\GAC_MSIL\Microsoft.Security.ApplicationId.Wizards.AutomaticRuleGenerationWizard.resources\6.1.0.0_en_31bf3856ad364e35\Microsoft.Security.ApplicationId.Wizards.AutomaticRuleGenerationWizard.resources.dll
Found 1.

D:\Development>

Узнав проблемные файлы, вы можете либо переименовать их, чтобы они стали короче, либо переименовать одну из папок в этом пути, либо (возможно) подключить сетевой диск к подпапке в этом пути, что сократит длину пути.

Связанный контент