Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Prozentzeichen im Dateipfad macht Ärger

Frage Entwicklung Batch & Shell

Mitglied: sysroy

sysroy (Level 1) - Jetzt verbinden

23.07.2009, aktualisiert 10:54 Uhr, 6361 Aufrufe, 6 Kommentare

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:

01.
@echo off & setlocal 
02.
set "Quelle=D:\Eigene Daten" 
03.
set "Ziel=D:\neueDaten" 
04.
 
05.
for /f "delims=" %%i in ('dir /s /b /a-d "%Quelle%"') do set "Pfad=%%i" & call :CopyFile "%%i" 
06.
goto :eof 
07.
 
08.
:CopyFile 
09.
call set "PfadNeu=%%Pfad:%Quelle%=%%" 
10.
set "PfadNeu=%PfadNeu: =%" 
11.
xcopy %1 "%Ziel%%PfadNeu%*">nul 
12.
goto :eof
In der Zeile

01.
call set "PfadNeu=%%Pfad:%Quelle%=%%"
oder

01.
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
Mitglied: rubberman
23.07.2009 um 14:45 Uhr
Nur mal ein Tip, ohne dass ich mir das scho näher angesehen hätte. Vermutlich sind die beiden von dir verdächtigten Zeilen nicht die Übeltäter, sondern vielmehr der Parameter %%i (alias %1 in deiner Subroutine). Versuche dort mal mit der Variablen "%Pfad%" zu arbeiten.
Bitte warten ..
Mitglied: sysroy
24.07.2009 um 08:33 Uhr
Nein rubberman,

das war's nicht.

Übrigens wird in meinem Browser die Zeile 05 dargestellt als wären da zwei Aufrufe "Call: Copyfile", im Quelltext sieht man es aber richtig.
Bitte warten ..
Mitglied: rubberman
24.07.2009 um 21:38 Uhr
Hmm, was ich meinte sieht so aus:
01.
@echo off &setlocal 
02.
set "Quelle=D:\Eigene Daten" 
03.
set "Ziel=D:\neueDaten" 
04.
 
05.
for /f "delims=" %%i in ('dir /s /b /a-d "%Quelle%"') do set "Pfad=%%i" & call :CopyFile 
06.
goto :eof 
07.
 
08.
:CopyFile 
09.
call set "PfadNeu=%%Pfad:%Quelle%=%%" 
10.
set "PfadNeu=%PfadNeu: =%" 
11.
xcopy "%Pfad%" "%Ziel%%PfadNeu%*">nul 
12.
goto :eof
Sollte doch eigentlich funktionieren?!
Bitte warten ..
Mitglied: bastla
24.07.2009 um 22:03 Uhr
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):
01.
:CopyFile 
02.
call set "PfadNeu=%%Pfad:%Quelle%=%%" 
03.
xcopy "%Pfad%" "%Ziel%%PfadNeu: =%*">nul 
04.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: sysroy
27.07.2009 um 10:36 Uhr
Hallo rubberman, hallo Bastla,

war das Wochende weg, deshalb erst heute die Anwort.

Es funktioniert genau so, wie rubberman es angibt - keine Ahnung, was ich beim ersten Versuch falsch gemacht habe .

Vielen Dank an Euch Beide

sysroy
Bitte warten ..
Mitglied: pieh-ejdsch
29.07.2009 um 01:35 Uhr
der Verlust des Prozentzeichens erfolgt nicht bei Zeile 09 oder 10 sondern weil in Zeile 05 hinter dem CALL die Variable Übergeben wird
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.


01.
@ echo off 
02.
for /f "delims=" %%i in ('dir /s /b /a-d "D:\Eigene Daten"') do set "pfad=%%i" & call :CopyFile 
03.
goto :eof 
04.
:CopyFile 
05.
set "pfadneu=D:\neue%pfad:~10%" 
06.
xcopy "%pfad%" "%pfadneu: =%*">nul
Gruß Phil
[Edit] ups ist ja schon beantwortet naja steht halt nochmehr da...[/Edit]
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Netzwerkmanagement
gelöst Macht eine VPN Verbindung in eine DMZ sinn? (8)

Frage von M.Marz zum Thema Netzwerkmanagement ...

SAN, NAS, DAS
Storage RAID LUN Konfiguration - Wie macht ihr es (4)

Frage von Marco-83 zum Thema SAN, NAS, DAS ...

Windows Server
Windows-Update für Secure-Boot-Fehler macht BIOS-Updates erforderlich (2)

Link von Penny.Cilin zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...