Prozentzeichen im Dateipfad macht Ärger
Hallo miteinander,
OS: Win XP und Win Server 2003
Mein Problem sind Sonderzeichen (z.B. Prozentzeichen "%", kaufmännisches UND "&") in Datei- und Ordnernamen, die beim automatischen Kopieren von Dateien nicht mit gelesen werden und dann zu "Datei nicht gefunden..." - Fehlern führen.
Ich habe zwar den Beitrag "Übergabe von Variabeln die Prozentzeichen enthalten per call" gelesen aber es hat mich nicht weitergebracht - vermutlich nicht richtig verstanden .
Das Problem steht im Zusammenhang mit meiner vorherigen Frage (Verzeichnisstrukturen automatisch so umkopieren, dass in der Kopie keine Leerzeichen mehr in den Ordner- und Dateinamen sind Dateien mit von Leerzeichen befreiten Pfaden kopieren), zu der mir Bastla folgenden Quellcode geschickt hat, der normalerweise auch funktioniert:
In der Zeile
oder
erfolgt der Verlust des %-Zeichens
Frage: Wie kann der Code geändert werden, dass die Dateipfade mit diesen Sonderzeichen erhalten bleiben??
Danke
sysroy
OS: Win XP und Win Server 2003
Mein Problem sind Sonderzeichen (z.B. Prozentzeichen "%", kaufmännisches UND "&") in Datei- und Ordnernamen, die beim automatischen Kopieren von Dateien nicht mit gelesen werden und dann zu "Datei nicht gefunden..." - Fehlern führen.
Ich habe zwar den Beitrag "Übergabe von Variabeln die Prozentzeichen enthalten per call" gelesen aber es hat mich nicht weitergebracht - vermutlich nicht richtig verstanden .
Das Problem steht im Zusammenhang mit meiner vorherigen Frage (Verzeichnisstrukturen automatisch so umkopieren, dass in der Kopie keine Leerzeichen mehr in den Ordner- und Dateinamen sind Dateien mit von Leerzeichen befreiten Pfaden kopieren), zu der mir Bastla folgenden Quellcode geschickt hat, der normalerweise auch funktioniert:
@echo off & setlocal
set "Quelle=D:\Eigene Daten"
set "Ziel=D:\neueDaten"
for /f "delims=" %%i in ('dir /s /b /a-d "%Quelle%"') do set "Pfad=%%i" & call :CopyFile "%%i"
goto :eof
:CopyFile
call set "PfadNeu=%%Pfad:%Quelle%=%%"
set "PfadNeu=%PfadNeu: =%"
xcopy %1 "%Ziel%%PfadNeu%*">nul
goto :eof
In der Zeile
call set "PfadNeu=%%Pfad:%Quelle%=%%"
oder
set "PfadNeu=%PfadNeu: =%"
erfolgt der Verlust des %-Zeichens
Frage: Wie kann der Code geändert werden, dass die Dateipfade mit diesen Sonderzeichen erhalten bleiben??
Danke
sysroy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 121125
Url: https://administrator.de/contentid/121125
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
6 Kommentare
Neuester Kommentar
Hmm, was ich meinte sieht so aus:
Sollte doch eigentlich funktionieren?!
@echo off &setlocal
set "Quelle=D:\Eigene Daten"
set "Ziel=D:\neueDaten"
for /f "delims=" %%i in ('dir /s /b /a-d "%Quelle%"') do set "Pfad=%%i" & call :CopyFile
goto :eof
:CopyFile
call set "PfadNeu=%%Pfad:%Quelle%=%%"
set "PfadNeu=%PfadNeu: =%"
xcopy "%Pfad%" "%Ziel%%PfadNeu%*">nul
goto :eof
Hallo sysroy!
Da das Prozentzeichen beim Speichern des Pfades ohne Leerzeichen in die Variable %PfadNeu% verloren geht, sollte dieses Speichern vermieden werden; zusätzlich kann, wie auch rubberman schon erwähnt hat, auch der Parameter %1 durch %Pfad% ersetzt werden (haben den selben Inhalt, aber eine unterschiedliche Anzahl von Prozentzeichen im Variablennamen bzw sind unterschiedliche Arten von Variablen):
Grüße
bastla
Da das Prozentzeichen beim Speichern des Pfades ohne Leerzeichen in die Variable %PfadNeu% verloren geht, sollte dieses Speichern vermieden werden; zusätzlich kann, wie auch rubberman schon erwähnt hat, auch der Parameter %1 durch %Pfad% ersetzt werden (haben den selben Inhalt, aber eine unterschiedliche Anzahl von Prozentzeichen im Variablennamen bzw sind unterschiedliche Arten von Variablen):
:CopyFile
call set "PfadNeu=%%Pfad:%Quelle%=%%"
xcopy "%Pfad%" "%Ziel%%PfadNeu: =%*">nul
goto :eof
bastla
der Verlust des Prozentzeichens erfolgt nicht bei Zeile 09 oder 10 sondern weil in Zeile 05 hinter dem CALL die Variable Übergeben wird
Ob daran nun die Subroutine schuld ist ....?? die Verzögerte Variablenauflösung ändert jedenfalls an dieser Sache auch nichts. Ach ja - der Bill weiss es bestimmt - warum...
also ist Deine eigentliche Zeile 11 Schuld an der ganzen Miesere.
Dein & macht so eigentlich gar keine Probleme, da Du ja die Gänsefüsschen drumrum gefriemelt hast.
nur wenn Du Deine Variable Ohne Gänsefüsschen weiterverarbeiten willst, dann brauchst Du diese Zusatzzeile mit der Variablenumschreibung. Du musst also schon vorher wissen ob die Gänsefüsschen gebraucht werden oder nicht.
bei Dateinamen mit Leerzeichen brauchst Du ja ohnehin die Federviehlatschenfüller.
Gruß Phil
[Edit] ups ist ja schon beantwortet naja steht halt nochmehr da...[/Edit]
es war ein bischen kniffliger, da die Forschleife eine Variable beim Übergeben in eine Subroutine als Parameter nicht mit den Prozentzeichen übergibt, sondern dieses einfach entfernt.
das bedeuted, sobald Du eine Variable mit dem Prozentzeichen in eine Subroutine schickst wird das Prozentzeichen entfernt es wird zwar noch hinter dem CALL mit angezeigt aber bei der Parameterübergabe haperts...Ob daran nun die Subroutine schuld ist ....?? die Verzögerte Variablenauflösung ändert jedenfalls an dieser Sache auch nichts. Ach ja - der Bill weiss es bestimmt - warum...
also ist Deine eigentliche Zeile 11 Schuld an der ganzen Miesere.
Dein & macht so eigentlich gar keine Probleme, da Du ja die Gänsefüsschen drumrum gefriemelt hast.
nur wenn Du Deine Variable Ohne Gänsefüsschen weiterverarbeiten willst, dann brauchst Du diese Zusatzzeile mit der Variablenumschreibung. Du musst also schon vorher wissen ob die Gänsefüsschen gebraucht werden oder nicht.
bei Dateinamen mit Leerzeichen brauchst Du ja ohnehin die Federviehlatschenfüller.
@ echo off
for /f "delims=" %%i in ('dir /s /b /a-d "D:\Eigene Daten"') do set "pfad=%%i" & call :CopyFile
goto :eof
:CopyFile
set "pfadneu=D:\neue%pfad:~10%"
xcopy "%pfad%" "%pfadneu: =%*">nul
Gruß Phil
[Edit] ups ist ja schon beantwortet naja steht halt nochmehr da...[/Edit]