CMD Datei erstellen imÜberlangen Pfad

madmax2010 schrieb:
Dateien verschieben oder ein Dateisystem nutzen, dass mit so langen pfaden klar kommt.
Mit dem Dateisystem hat das nur garnichts zutun. NTFS kann 32768 Zeichen.

Das Problem sind alte künstlicher teils Jahrzehnte mitgeschleifte Limits in Programmen, die heutzutage eigentlich garnicht mehr nötig sind oder aufgrund von "Kompatibilität" weiter erhalten geblieben sind, wie im Win32 API Core eben auch.

Es gibt natürlich Mittel und Wege das zu umgehen. Mit Batch meine ich allerdings nicht, ich glaub für Powershell gibts eine Notation mit der es funktioniert, müsste man mal nachlesen. Ansonsten kann mans auch mit aktivem LongPathAware versuchen.

https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry

Grundsätzlich sollte man solche Pfade allerdings vermeiden, solange nicht sichergestellt ist das alle involvierten Programme damit umgehen können.

@Helmut-HB Der Beispielpfad fliegt dir z.B. beim simpeln nutzen von Adobe Acrobat in Verbindung mit PDF um die Ohren, das kann der nämlich aus genannten Gründen nicht.
 
  • Gefällt mir
Reaktionen: ILoveShooter132 und madmax2010
Helmut-HB schrieb:
Die Datei muss auf dem PC geschrieben werden.
Wurde in der Registry im Pfad "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" das DWORD32 mit den Name LongPathsEnabled und dem Wert 1 schon erstellt ?

JumpingCat schrieb:
Meinst du diesen Pfad ernst?

der Pfad ansich ist ok, ist wohl auch nur ein Beispiel. Wenn der aber wirklich so aussieht, ist der mehrfach redundant, da sollte man aufräumen.
Ansonsten habe ich schon schlimmere Pfade gesehen.

€dit:

@Helmut-HB

aber ACHTUNG - viele Programme kommen nicht mit den langen Pfaden zurecht, auch Microsoft Office nicht bis einschließlich der 2021er Version. Auch der Explorer unter Windows hat damit seine Probleme. Es kann auch durchaus sein, das die Ausgabe, die die Datei der Ausgabe schreiben soll, ebenso nicht damit zurecht kommt.
Von daher wäre es durchaus ratsam, sich an ein gewisses Limit an Zeichen und Pfadtiefe zu halten.

Du kannst ja auch mal prüfen, ob in einen der obersten Ordner die Datei geschrieben wird, innerhalb des 240 Zeichenlimits.
Wenn ja, dann liegt es definitiv am Programm. Dann heißt es entwerder Workarounds finden wie schon meine Vorposter gesagt haben oder die Dateistruktur zu optimieren.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: nutrix, ILoveShooter132, redjack1000 und 2 andere
Beispielpfad. Es gibt auch noch längere.
Microsoft Limits: Leidige Diskussion. Führt zu nix.
Registry ist gesetzt.
Programm zur Analyse und zum aufräumen können mit langen Pfaden umgehen.
Jetzt muss ich nur noch die Dateien eben in solchen Pfaden schreiben können.
\\?\ hab ich getestet. Geht nicht. Mache morgen nochmals einen Versuch.
Bietet vielleicht Python eine Chance
 
  • Gefällt mir
Reaktionen: nutrix
Sebbi schrieb:
Wurde in der Registry im Pfad "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" das DWORD32 mit den Name LongPathsEnabled und dem Wert 1 schon erstellt ?

Ist das nicht seit einiger Zeit Geschichte?
 
Ja! Habs trotzdem gemacht...
Bin nun ein wenig angesäuselt. Ich mache morgen weiter. Schönen Abend noch...
 
BFF schrieb:
Ist das nicht seit einiger Zeit Geschichte?

sollte so sein, ist aber nicht immer der Fall - just Microsoft things

ist jenachdem noch aktiv unter gewissen Umständen, vorallem wenn man Windows 10 lange nicht mit frischen ISOs komplett neu installiert hat oder von Win 10 auf Win11 geupgradet hat, oder man von pre 2023 Windows 11 Versionen immer nur geupdatet hat.

Daher schadet es nicht, den Regkey dennoch zu setzten

Und selbst dann können noch lange nicht alle Programme damit umgehen ....
 
  • Gefällt mir
Reaktionen: nutrix, Mojo1987 und BFF
Helmut-HB schrieb:
\\?\ hab ich getestet. Geht nicht.
Welche Fehlermeldung kommt denn?
Ich habe es eben bei einem Windows 10 Version 22H2 Build 19045.6466 getestet und es funktionierte problemlos.
Ich hatte einen Pfad mit vielen Unterverzeichnissen erstellt, die Länge war über 330 Zeichen.
Ich konnte mit ECHO eine Datei erzeugen / darin schreiben und die Datei mit TYPE auslesen. Immer mit dem Präfix \\?\, z.B. "\\?\C:\langer Pfad\mit\vielen\Unterverzeichnissen\Ausgabe.txt" (""-Zeichen sind Pflicht).

Ohne Nutzung des Präfixes erhielt ich die Fehlermeldung "Das System kann den angegebenen Pfad nicht finden".

EDIT:
Mit echo test>"\\?\C:\Ausgabe\ds hh daten\hh daten\_KLÄREN\CAR NAS Daten aus Desasta\CAROLA_NAS\Daten\Netzwerk\Verwaltung_Büro\Buchhaltung\Buchhaltung\Finanzbuchhaltung\Zahlungsverkehr_2015\erledigt\Netzwerk\Verwaltung_Büro\Buchhaltung\Buchhaltung\Finanzbuchhaltung\Zahlungsverkehr_2015\erledigt\CAR NAS Daten aus Desasta\CAROLA_NAS\Daten\Netzwerk\Verwaltung_Büro\Buchhaltung\Ausgabe.txt" hatte es ebenfalls funktioniert.


BFF schrieb:
Sebbi schrieb:
Wurde in der Registry im Pfad "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" das DWORD32 mit den Name LongPathsEnabled und dem Wert 1 schon erstellt ?
Ist das nicht seit einiger Zeit Geschichte?

Wenn man in Windows 11 unter Einstellungen -> System -> Erweitert die Option "Lange Pfade aktivieren" aktiviert oder deaktiviert, dann wird der von Sebbi erwähnte Registry-Wert auf 1 oder 0 umgestellt. Das scheint also noch notwendig zu sein...
 
Zuletzt bearbeitet: (Text auf Win10 geändert, ich hatte zuerst mit Win11 getestet.)
  • Gefällt mir
Reaktionen: Redundanz und nutrix
Darkman.X schrieb:
Mit echo test>"\\?\C:\Ausgabe\ds hh daten\hh daten\_KLÄREN\CAR NAS Daten aus Desasta\CAROLA_NAS\Daten\Netzwerk\Verwaltung_Büro\Buchhaltung\Buchhaltung\Finanzbuchhaltung\Zahlungsverkehr_2015\erledigt\Netzwerk\Verwaltung_Büro\Buchhaltung\Buchhaltung\Finanzbuchhaltung\Zahlungsverkehr_2015\erledigt\CAR NAS Daten aus Desasta\CAROLA_NAS\Daten\Netzwerk\Verwaltung_Büro\Buchhaltung\Ausgabe.txt" hatte es ebenfalls funktioniert.
Der Befehl funktioniert in der Eingabeaufforderung.
Den Befehl inn eine *.bat kopiert, wird die Datei ohne Fehlermeldung nicht angelegt.
 
  • Gefällt mir
Reaktionen: Redundanz
@Helmut-HB
Und warum steht das nicht in deiner Antwort in #26?

Wenn dein super langer Pfad wirklich so vorliegt, dann liegt die Problemursache in den Umlauten und der verwendeten Codepage in CMD/Batch.

Ein möglicher Workaround, der aber relativ umständlich ist, je nachdem wie viele Pfade benötigt werden:
Code:
@ECHO OFF

CHCP 65001>NUL
SET "ae=ä"
SET "oe=ö"
SET "ue=ü"
SET "Aae=Ä"
SET "Ooe=Ö"
SET "Uue=Ü"
SET "ss=ß"
CHCP 850>NUL

SET "File=\\?\C:\Ausgabe\ds hh daten\hh daten\_KL%Aae%REN\CAR NAS Daten aus Desasta\CAROLA_NAS\Daten\Netzwerk\Verwaltung_B%ue%ro\Buchhaltung\Buchhaltung\Finanzbuchhaltung\Zahlungsverkehr_2015\erledigt\Netzwerk\Verwaltung_B%ue%ro\Buchhaltung\Buchhaltung\Finanzbuchhaltung\Zahlungsverkehr_2015\erledigt\CAR NAS Daten aus Desasta\CAROLA_NAS\Daten\Netzwerk\Verwaltung_B%ue%ro\Buchhaltung\Ausgabe.txt"

ECHO test>"%File%"

In der Zeile 13 (die mit SET "File=....") müssen alle Umlaute durch die Variablen ersetzt werden, was ich bereits gemacht habe.
Und die Batch-Datei muss mit der Codierung "UTF-8" abgespeichert werden.
Ergänzung ()

Du hattest auch erwähnt, dass es mit Powershell mit einer PS1-Datei nicht funktioniert.
Gleiches Problem, aber wesentlich einfacher zu lösen: Die PS1-Datei muss mit der Codierung "UTF-8 mit BOM" gespeichert werden. Dann müssen die Umlaute nicht durch Variablen oder so ersetzt werden.

(Die Aussage gilt nur für PS 5.x, welches nativ in Windows vorhanden ist. Mit PS 7.x kenne ich mich nicht aus.)


EDIT:
Hiermit endet mein Support. Das Problem mit den Umlauten kann man super leicht analysieren, wenn man Grundwissen in Batch hat. Von dir kam aber keine Eigenleistung zurück, was ich nicht gut finde.
 
Zuletzt bearbeitet:
Der Pfad/Dateiname liegt als Literal vor.
Der Befehl MKDIR funktioniert, echo nicht weil hier die Codierung greift.
Hab ich das richtig verstanden?
 
Nimm Powershell und arbeite mit einen Script. CMD ist oldschool :)
 
ganz anderer Ansatz:
Erstelle einen Symlink
Code:
mklink /D "C:\Ausgabe\carolaspfaddestodes" "C:\Ausgabe\ds hh daten\hh daten\_KLÄREN\CAR NAS Daten aus Desasta\CAROLA_NAS\Daten\Netzwerk\Verwaltung_Büro\Buchhaltung\Buchhaltung\Finanzbuchhaltung\Zahlungsverkehr_2015\erledigt\Netzwerk\Verwaltung_Büro\Buchhaltung\Buchhaltung\Finanzbuchhaltung\Zahlungsverkehr_2015\erledigt\CAR NAS Daten aus Desasta\CAROLA_NAS\Daten\Netzwerk\Verwaltung_Büro\Buchhaltung\Ausgabe.txt"
oder eine Junction
Code:
mklink /J "C:\Ausgabe\carolaspfaddestodes" "C:\Ausgabe\ds hh daten\hh daten\_KLÄREN\CAR NAS Daten aus Desasta\CAROLA_NAS\Daten\Netzwerk\Verwaltung_Büro\Buchhaltung\Buchhaltung\Finanzbuchhaltung\Zahlungsverkehr_2015\erledigt\Netzwerk\Verwaltung_Büro\Buchhaltung\Buchhaltung\Finanzbuchhaltung\Zahlungsverkehr_2015\erledigt\CAR NAS Daten aus Desasta\CAROLA_NAS\Daten\Netzwerk\Verwaltung_Büro\Buchhaltung\Ausgabe.txt"
von C:\Ausgabe\carolaspfaddestodes
auf
C:\Ausgabe\ds hh daten\hh daten\_KLÄREN\CAR NAS Daten aus Desasta\CAROLA_NAS\Daten\Netzwerk\Verwaltung_Büro\Buchhaltung\Buchhaltung\Finanzbuchhaltung\Zahlungsverkehr_2015\erledigt\Netzwerk\Verwaltung_Büro\Buchhaltung\Buchhaltung\Finanzbuchhaltung\Zahlungsverkehr_2015\erledigt\CAR NAS Daten aus Desasta\CAROLA_NAS\Daten\Netzwerk\Verwaltung_Büro\Buchhaltung\Ausgabe.txt

lass das script einfach nach C:\Ausgabe\carolaspfaddestodes\Ausgabe.txt schreiben.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: dahkenny, BFF und sikarr
Cooler Workaround für ein völlig krankes Problem. Wird bei uns auch bald vorkommen, da man der Meinung ist alles aus einem Wiki in Word zu packen und das natürlich mit den entsprechenden Pfaden. Zum Glück mache ich nur Datenbanken
 
  • Gefällt mir
Reaktionen: Redundanz
h00bi schrieb:
ganz anderer Ansatz:
Erstelle einen Symlink

das Problem ist, jenachdem wie tief die Pfade sind und wo überall was reingeschrieben werden soll, bracht man auch für viele Orte die entsprechenden Symlinks ... das ist glaube ich nicht zielführend
 
Zurück
Oben