![O nome do arquivo é muito longo para copiar, mas não diz qual](https://rvso.com/image/1346595/O%20nome%20do%20arquivo%20%C3%A9%20muito%20longo%20para%20copiar%2C%20mas%20n%C3%A3o%20diz%20qual.png)
Eu estava copiando vários arquivos, mas não consegui copiar alguns porque o nome era muito longo. Existe uma maneira fácil de encurtar os nomes ou posso pelo menos saber o caminho para onde o nome do arquivo fica muito longo?
EDIT: por monte de arquivos quero dizer que há dois diretórios, cada um contendo arquivos e mais diretórios contendo mais arquivos, etc. Estou simplesmente copiando por ctrl + c
Responder1
Você pode usarScanner de caminhopara encontrar os arquivos ofensivos. (Role até o final para Old Path Scanner)
Responder2
eu sugeririaRobocópia, embutido em Windows 7
.
robocopy <Source> <Destination> [<File>[ ...]] [<Options>]
Responder3
Se você concorda com uma solução de linha de comando, o cp
utilitário que incluo comConcha Hamilton Ccopiará facilmente seus arquivos sem a necessidade de encurtar nada. (Divulgação completa: sou o autor.) Como o restante dos meus utilitários básicos de arquivos, ele usanomes de arquivos Unicode longosinternamente para suportar comprimentos de caminho de até 32 mil caracteres, o limite do sistema.
Se isso for algo único (e possivelmente mesmo que não seja), tudo que você precisa é doversão gratuita. Deixe-me saber se encontrar um problema ou precisar de ajuda para fazer o que deseja.
Responder4
Para resolver o problema, você precisa encontrar os arquivos incorretos em que o caminho completo e o nome do arquivo tenham mais de 255 caracteres. Como encontrar o comprimento em um arquivo em lote é um pouco complicado, eu uso o seguinte VBScript.
Salve o código abaixo em um arquivo chamado longpaths.vbs
. Execute-o a partir de um prompt de comando do DOS com o seguinte cscript longpaths.vbs <path> <length>
onde <path>
é o local da pasta (não se esqueça de colocá-la entre aspas se tiver espaço) e <length>
é o comprimento do caminho acima do qual ela deve sinalizar.
O código é o seguinte:
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
Exemplo de uso e saída:
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>
Depois de conhecer os arquivos problemáticos, você pode renomeá-los para que fiquem mais curtos, renomear uma das pastas nesse caminho ou (possivelmente) mapear uma unidade de rede para uma subpasta nesse caminho, o que reduzirá o comprimento do caminho.