
Ich habe eine Reihe von Dateien kopiert, konnte aber einige nicht kopieren, da deren Namen zu lang waren. Gibt es eine einfache Möglichkeit, die Namen zu kürzen, oder kann ich zumindest den Pfad erfahren, ab dem der Dateiname zu lang wird?
EDIT: mit Haufen von Dateien meine ich, dass es zwei Verzeichnisse gibt, die jeweils Dateien enthalten, und weitere Verzeichnisse, die weitere Dateien enthalten usw. Ich kopiere einfach mit Strg+C
Antwort1
Sie könnenPfadscannerum die fehlerhaften Dateien zu finden. (Scrollen Sie nach unten zum Old Path Scanner)
Antwort2
ich würde vorschlagenRobocopy, eingebaut in Windows 7
.
robocopy <Source> <Destination> [<File>[ ...]] [<Options>]
Antwort3
Wenn Sie mit einer Befehlszeilenlösung einverstanden sind, das cp
Dienstprogramm, das ich mit einschließeHamilton C-Schalekopiert Ihre Dateien ganz einfach, ohne dass Sie etwas kürzen müssen. (Vollständige Offenlegung: Ich bin der Autor.) Wie der Rest meiner grundlegenden Datei-Dienstprogramme verwendet eslange Unicode-DateinamenIntern werden Pfadlängen von bis zu 32.000 Zeichen, der Systemgrenze, unterstützt.
Wenn dies eine einmalige Sache ist (und möglicherweise auch wenn es nicht so ist), brauchen Sie nur dieFreie Version. Sagen Sie mir Bescheid, wenn Sie auf ein Problem stoßen oder Hilfe brauchen, damit es Ihren Wünschen entspricht.
Antwort4
Um das Problem zu lösen, müssen Sie die fehlerhaften Dateien finden, deren vollständiger Pfad und Dateiname länger als 255 Zeichen sind. Da die Suche nach der Länge in einer Batchdatei ein ziemliches Durcheinander ist, verwende ich das folgende VBScript.
Speichern Sie den untenstehenden Code in einer Datei namens longpaths.vbs
. Führen Sie ihn in einer DOS-Eingabeaufforderung mit Folgendem aus, cscript longpaths.vbs <path> <length>
wobei <path>
der Speicherort des Ordners (vergessen Sie nicht, ihn in Anführungszeichen zu setzen, wenn Sie ein Leerzeichen haben) und <length>
die Länge des Pfads ist, ab dem er markiert werden soll.
Der Code lautet wie folgt:
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
Beispiele für Verwendung und Ausgabe:
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>
Wenn Sie die Problemdateien kennen, können Sie sie entweder umbenennen, sodass sie kürzer sind, einen der Ordner in diesem Pfad umbenennen oder (möglicherweise) einem Unterordner in diesem Pfad ein Netzlaufwerk zuordnen, wodurch die Länge des Pfads verkürzt wird.