J'utilise un xcopy dans un script de Windows XP pour copier récursivement un répertoire. Je continue à obtenir une erreur 'Mémoire insuffisante', qui, d'après ce que je comprends, est due au fait qu'un fichier que j'essaie de copier a un chemin trop long. Je peux facilement réduire la longueur du chemin, mais malheureusement, je n'arrive pas à déterminer quels sont les fichiers qui violent la restriction de longueur du chemin. Les fichiers copiés sont imprimés sur la sortie standard (que je redirige vers un fichier journal), mais le message d'erreur est imprimé sur le terminal, ce qui fait que je ne peux même pas savoir approximativement pour quel répertoire l'erreur est donnée.
Réponses
Trop de publicités?Vous pouvez rediriger stderr.
plus d'explication aquí mais avoir une commande comme :
MyCommand >log.txt 2>errors.txt
devrait permettre d'obtenir les données que vous recherchez.
De plus, Windows contourne cette limitation si le chemin est préfixé par \\?\
( msdn )
Une autre astuce si vous avez une racine ou une destination qui commence par un long chemin, peut-être SUBST
vous aidera :
SUBST Q: "C:\Documents and Settings\MyLoginName\My Documents\MyStuffToBeCopied"
Xcopy Q:\ "d:\Where it needs to go" /s /e
SUBST Q: /D
Aussi fou que cela puisse paraître, cette question est toujours d'actualité. Aucune des réponses ne m'a donné tout à fait ce que je voulais, mais E235 m'a donné la base. J'imprime également la longueur du nom pour voir plus facilement combien de caractères il faut couper.
Get-ChildItem -Recurse | Where-Object {$_.FullName.Length -gt 260} | %{"{0} : {1}" -f $_.fullname.Length,$_.fullname }
Pour les chemins supérieurs à 260 :
que vous pouvez utiliser :
Get-ChildItem | Where-Object {$_.FullName.Length -gt 260}
Exemple sur 14 caractères :
Pour visualiser la longueur des chemins :
Get-ChildItem | Select-Object -Property FullName, @{Name="FullNameLength";Expression={($_.FullName.Length)}
Obtenez des chemins supérieurs à 14 :
Get-ChildItem | Where-Object {$_.FullName.Length -gt 14}
Capture d'écran :
Pour les noms de fichiers supérieurs à 10 :
Get-ChildItem | Where-Object {$_.PSChildName.Length -gt 10}
Capture d'écran :
- Réponses précédentes
- Plus de réponses