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, 6458 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 ..
Ähnliche Inhalte
Switche und Hubs
gelöst LAG zwischen SG300-Switches macht Probleme. Wer weiß Rat? (31)

Frage von White-Rabbit2 zum Thema Switche und Hubs ...

Internet
IMDb schließt Filmforen und macht sie unzugänglich (2)

Link von Deepsys zum Thema Internet ...

Windows 10
gelöst Notebook macht sehr viel Traffic (9)

Frage von DeathNote zum Thema Windows 10 ...

Neue Wissensbeiträge
Google Android

Cyanogenmod alternative Downloadquelle

(5)

Tipp von Lochkartenstanzer zum Thema Google Android ...

Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(5)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Heiß diskutierte Inhalte
Windows Server
gelöst Exchange HyperV Prozessorlast (19)

Frage von theoberlin zum Thema Windows Server ...

Hardware
16-20 Port POE Switch mit VLAN (19)

Frage von thomasreischer zum Thema Hardware ...

Windows Server
Server mit Netzwerkaussetzern (17)

Frage von SarekHL zum Thema Windows Server ...

Netzwerke
Vorschlag Hotelverkabelung (14)

Frage von FA-jka zum Thema Netzwerke ...