Principale utente con più risposte
File lunghi più di 255 caratteri

Domanda
-
Ciao,
sto cercando di trasferire centinaia di migliaia di file da un Server OSx ad un Server Windows 2012 R2.
Mi sono accorto però che molti file hanno un percorso troppo lungo e quindi una volta copiati sul Server Windows non riesco più a leggerli ne a modificarli.
Esiste un metodo, un tools oppure una modalità diversa di configurazione del Disco Windows, per poter utilizzare questi files?
Grazie
Franco
Risposte
-
Purtroppo è come ha detto Andrea e per ovviare al problema potresti:
- utilizzare uno script ad hoc (io di solito uso questo + robocopy)
- usare utility di terze parti
http://www.replsoft.com/cutlongnames.html(utility che non ho mai usato)
- usare robocopy per spostare blocchi di directory in percorsi più corti
- condividere delle sottocartelle per poter operare sui percorsi, poi rimuovere le condivisioni
- usare subst, apri un cmd.exe, con il comando CD posizionati all'interno fino a dove puoi e poi
subst X: .
ciao
Gas
Gastone Canali >http://www.armadillo.it
Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere- Proposto come risposta GastoneCanaliModerator lunedì 11 luglio 2016 01:29
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 18 luglio 2016 14:25
- utilizzare uno script ad hoc (io di solito uso questo + robocopy)
-
Avevo letto il documento, purtroppo il limite è "HARD CODED" (qualche variabile di tipo BYTE) nel cmd e in powershell es. con cmd si riesce a fare un percorso max di 255 e con ps si arriva a 260.
Sicuramente tutto funziona (come da doc), se si chiamano le api giuste nativamente da linguaggi managed o powershell.
Confermo che su di un windows 10 ha gestito bene i percorsi lunghi visualizzandoli "short" (un work around...) su altri niente da fare solito errore!
Allora mi sono detto e se io uso il percorso corto come fa windows 10?
Di seguito il solito codice per generare un percorso bello lungo
::eseguire da un prompt dei comandi le seguenti 3 linee di codice mkdir c:\prova echo.>c:\prova\file-da-cancellare.txt
::creo un path lungo 247 ([c:\][path][null char]=3+243+1) powershell.exe -command $p=(('x' * 60) +'\')*4; mkdir "c:\$p" ; cd "c:\$p" ; cmd /knel command prompt si incolla il codice seguente per avere il percorso corto
for /f %A in ('dir /b') do cd "%~sA"
Il TAAC di Bruno Bozzetto e funziona!
Ora da prompt è possibile cancellare/creare/etc
C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1>cd oltre\i\260\caratteri
C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1\oltre\i\260\caratteri>mkdir dipiuAncoradipiu
C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1\oltre\i\260\caratteri>cd dipiuAncoradipiu
C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1\oltre\i\260\caratteri\dipiuAncoradipiu>Questo è il 6° modo !!!
E da powershell funziona il workaround?
NO
Windows PowerShell
Copyright (C) 2015 Microsoft Corporation. Tutti i diritti sono riservati.
PS C:\temp> "C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1".length
38
PS C:\temp> cd "C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1"
PS C:\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> cd\
PS C:\> cd "C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1\oltre\i\260\caratteri"
cd : Impossibile elaborare l'argomento. Il valore dell'argomento "path" non è valido. Modificare
il valore dell'argomento "path" ed eseguire nuovamente l'operazione.
In riga:1 car:1
+ cd "C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1\oltre\i\260\caratteri"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-Location], PSArgumentException
+ FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.SetLocationCommand
Ciao Gas
Gastone Canali >http://www.armadillo.it
Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere
- Proposto come risposta GastoneCanaliModerator venerdì 15 luglio 2016 20:16
- Modificato GastoneCanaliModerator venerdì 15 luglio 2016 20:17
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 18 luglio 2016 14:25
Tutte le risposte
-
Ciao Franco,
purtroppo questa è una limitazione delle API di Windows (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396) per risolvere il problema puoi provare ad accorciare i nomi delle cartelle che compongono il path.
In caso non riuscissi a modificare/cancellare i file tempo fa ho usato questo metodo: http://sistarelli.com/2016/06/04/impossibile-eliminare-un-file-o-una-cartella/
Ciao
Andrea Sistarelli
Blog
Datacen srl - Consulenza informatica- Proposto come risposta Andrea Sistarelli sabato 9 luglio 2016 05:09
- Proposta come risposta annullata Edoardo BenussiMVP, Moderator lunedì 18 luglio 2016 14:25
-
Purtroppo è come ha detto Andrea e per ovviare al problema potresti:
- utilizzare uno script ad hoc (io di solito uso questo + robocopy)
- usare utility di terze parti
http://www.replsoft.com/cutlongnames.html(utility che non ho mai usato)
- usare robocopy per spostare blocchi di directory in percorsi più corti
- condividere delle sottocartelle per poter operare sui percorsi, poi rimuovere le condivisioni
- usare subst, apri un cmd.exe, con il comando CD posizionati all'interno fino a dove puoi e poi
subst X: .
ciao
Gas
Gastone Canali >http://www.armadillo.it
Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere- Proposto come risposta GastoneCanaliModerator lunedì 11 luglio 2016 01:29
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 18 luglio 2016 14:25
- utilizzare uno script ad hoc (io di solito uso questo + robocopy)
-
Andrea ho provato ad usare la sinassi posix "\\?\" come hai suggerito, ma non funziona con percosi più lunghi di 255
Rimane utile solo per cancellare file o folder con caratteri o nomi particolari es.
mkdir \\.\c:\temp\con rmdir \\.\c:\temp\con
ciao Gas
Gastone Canali >http://www.armadillo.it
Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere
- Modificato GastoneCanaliModerator mercoledì 13 luglio 2016 17:57
-
Ciao Gastone,
devi usare il ? e non il ., ho provato ora e funziona:
C:\Temp\prova>dir Volume in drive C has no label. Volume Serial Number is 762E-432D Directory of C:\Temp\prova 13/07/2016 08:45 <DIR> . 13/07/2016 08:45 <DIR> .. 0 File(s) 0 bytes 2 Dir(s) 70.583.152.640 bytes free C:\Temp\prova>mkdir \\?\c:\temp\prova\test C:\Temp\prova>dir Volume in drive C has no label. Volume Serial Number is 762E-432D Directory of C:\Temp\prova 13/07/2016 08:46 <DIR> . 13/07/2016 08:46 <DIR> .. 13/07/2016 08:46 <DIR> test 0 File(s) 0 bytes 3 Dir(s) 70.583.152.640 bytes free C:\Temp\prova>
Ciao
Andrea Sistarelli
Blog
Datacen srl - Consulenza informatica- Proposto come risposta aperelli mercoledì 13 luglio 2016 08:16
- Proposta come risposta annullata GastoneCanaliModerator mercoledì 13 luglio 2016 17:56
-
Ciao Gastone,
devi usare il ? e non il ., ho provato ora e funziona:
...
C:\Temp\prova>mkdir \\?\c:\temp\prova\test
...
Ciao
Andrea Sistarelli
Blog
Datacen srl - Consulenza informaticaCiao Andrea,
io non ho mai detto che la sintassi posix (\\?\ o \\.\) non funzioni con percorsi inferiori ai 260 caratteri!!!
Avevo detto:
"Andrea ho provato ad usare la sinassi posix "\\?\" come hai suggerito, ma non funziona con percosi più lunghi di 255"
e continua a non funzionare anche con \\?\
Ecco il test
::eseguire da un prompt dei comandi le seguenti 3 linee di codice mkdir c:\prova echo.>c:\prova\file-da-cancellare.txt
::creo un path lungo 247 ([c:\][path][null char]=3+243+1) powershell.exe -command $p=(('x' * 60) +'\')*4; mkdir "c:\$p" ; cd "c:\$p" ; cmd /kper superare la barriera dei 260 usiamo robocopy
nel prompt rimasto aperto digitiamo:
robocopy c:\prova oltre\i\260\caratteri
:: ora proviamo ad andare sempre più in fondo cd oltre cd i cd 260a questo punto
cd \
del \\?\C:\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\oltre\i\260\caratteri\file-da-cancellare.txt Nome del file o estensione troppo lunga.ciao
Gastone Canali >http://www.armadillo.it
Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere
- Modificato GastoneCanaliModerator mercoledì 13 luglio 2016 23:14
-
Ciao Gastone,
scusa non avevo letto bene il tuo post, effettivamente non funziona!!! Eppure sono sicuro di averlo usato su un server 2012 R2 di un cliente e così sembra anche leggendo la pagina (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx)
Stavo cercando un pò su Google e sembra che nell'ultima Insider Preview di Windows 10 Microsoft ha aggiunto il supporto ai path pià lunghi si 260 caratteri:
http://www.ghacks.net/2016/05/27/microsoft-260-long-path-limit/
Ciao
Andrea Sistarelli
Blog
Datacen srl - Consulenza informatica -
Avevo letto il documento, purtroppo il limite è "HARD CODED" (qualche variabile di tipo BYTE) nel cmd e in powershell es. con cmd si riesce a fare un percorso max di 255 e con ps si arriva a 260.
Sicuramente tutto funziona (come da doc), se si chiamano le api giuste nativamente da linguaggi managed o powershell.
Confermo che su di un windows 10 ha gestito bene i percorsi lunghi visualizzandoli "short" (un work around...) su altri niente da fare solito errore!
Allora mi sono detto e se io uso il percorso corto come fa windows 10?
Di seguito il solito codice per generare un percorso bello lungo
::eseguire da un prompt dei comandi le seguenti 3 linee di codice mkdir c:\prova echo.>c:\prova\file-da-cancellare.txt
::creo un path lungo 247 ([c:\][path][null char]=3+243+1) powershell.exe -command $p=(('x' * 60) +'\')*4; mkdir "c:\$p" ; cd "c:\$p" ; cmd /knel command prompt si incolla il codice seguente per avere il percorso corto
for /f %A in ('dir /b') do cd "%~sA"
Il TAAC di Bruno Bozzetto e funziona!
Ora da prompt è possibile cancellare/creare/etc
C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1>cd oltre\i\260\caratteri
C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1\oltre\i\260\caratteri>mkdir dipiuAncoradipiu
C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1\oltre\i\260\caratteri>cd dipiuAncoradipiu
C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1\oltre\i\260\caratteri\dipiuAncoradipiu>Questo è il 6° modo !!!
E da powershell funziona il workaround?
NO
Windows PowerShell
Copyright (C) 2015 Microsoft Corporation. Tutti i diritti sono riservati.
PS C:\temp> "C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1".length
38
PS C:\temp> cd "C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1"
PS C:\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> cd\
PS C:\> cd "C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1\oltre\i\260\caratteri"
cd : Impossibile elaborare l'argomento. Il valore dell'argomento "path" non è valido. Modificare
il valore dell'argomento "path" ed eseguire nuovamente l'operazione.
In riga:1 car:1
+ cd "C:\XXXXXX~1\XXXXXX~1\XXXXXX~1\XXXXXX~1\oltre\i\260\caratteri"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-Location], PSArgumentException
+ FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.SetLocationCommand
Ciao Gas
Gastone Canali >http://www.armadillo.it
Se alcuni post rispondono al tuo quesito(non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili. GRAZIE! Ricorda di dare un occhio ai link Click Here andHere
- Proposto come risposta GastoneCanaliModerator venerdì 15 luglio 2016 20:16
- Modificato GastoneCanaliModerator venerdì 15 luglio 2016 20:17
- Contrassegnato come risposta Edoardo BenussiMVP, Moderator lunedì 18 luglio 2016 14:25
-
il tempo passa e un po' di documentazione ufficiale è uscita
Ecco come verificare se i percorsi lunghi sono abilitati
:: queto comando DEVE ritornare
:: LongPathsEnabled REG_DWORD 0x1
reg.exe query "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" -v long*:: questo per verificare se c'è la policy applicata
reg.exe query "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Policies" -v long*:: Setta la chiave per abilitare LongPathsEnabled
reg.exe ADD HKLM\SYSTEM\CurrentControlSet\Control\FileSystem /v LongPathsEnabled /t REG_DWORD /d 1 /f
https://docs.microsoft.com/it-it/windows/win32/fileio/maximum-file-path-limitation
Enable Long Paths in Windows 10, Version 1607, and Later
Starting in Windows 10, version 1607, MAX_PATH limitations have been removed from common Win32 file and directory functions. However, you must opt-in to the new behavior.
To enable the new long path behavior, both of the following conditions must be met:
-
The registry key
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled (Type: REG_DWORD)
must exist and be set to 1. The key's value will be cached by the system (per process) after the first call to an affected Win32 file or directory function (see below for the list of functions). The registry key will not be reloaded during the lifetime of the process. In order for all apps on the system to recognize the value of the key, a reboot might be required because some processes may have started before the key was set.Nota
This registry key can also be controlled via Group Policy at
Computer Configuration > Administrative Templates > System > Filesystem > Enable Win32 long paths
. -
The application manifest must also include the
longPathAware
element.XML
-
<windowssettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> <ws2:longpathaware>true</ws2:longpathaware> </windowssettings> "><application xmlns="urn:schemas-microsoft-com:asm.v3"> <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings"> <ws2:longPathAware>true</ws2:longPathAware> </windowsSettings> </application>
These are the directory management functions that no longer have MAX_PATH restrictions if you opt-in to long path behavior: CreateDirectoryW, CreateDirectoryExW GetCurrentDirectoryW RemoveDirectoryW SetCurrentDirectoryW.
Gastone Canali >
Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here- Modificato GastoneCanaliModerator venerdì 15 gennaio 2021 09:44
-