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

Dateien mit von Leerzeichen befreiten Pfaden kopieren

Frage Entwicklung Batch & Shell

Mitglied: sysroy

sysroy (Level 1) - Jetzt verbinden

21.07.2009, aktualisiert 11:36 Uhr, 3368 Aufrufe, 6 Kommentare

Hallo zusammen,

ich brauche bitte Eure Hilfe.

Im Vorhinein: Die Batch soll auf Windows XP - PC's und Windows 2003 Server laufen.

Es geht um folgendes:

Ich brauche eine Batch, die ein Verzeichnis (z.B. d:\eigen Daten) komplett in ein neues Verzeichnis kopiert und dabei sämtliche Leerzeichen aus den Pfaden und Dateinamen entfernt. Quelle und Ziel sollten flexibel sein und als Parameter beim Aufruf übergeben werden können (Beispiel: DelSpaces.cmd "d:\eigene Daten" d:\neueDaten)

Beispielsweise sollte die Datei

d:\eigene Daten\Mein Test\Test der ersten Auflösung.bmp

dann unter

d:\neueDaten\MeinTest\TestdererstenAuflösung.bmp

oder (plus dem alten Pfad, wenn das einfacher ist)

d:\neueDaten\d_\eigeneDaten\MeinTest\TestdererstenAuflösung.bmp

wiederzufinden sein.

Kann mir jemand dabei helfen?
Mitglied: bastla
21.07.2009 um 12:10 Uhr
Hallo sysroy und willkommen im Forum!

Kaum getestet etwa so:
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
Um Quelle und Ziel als Aufrufparameter verwenden zu können, einfach die Zeilen 2 und 3 durch
set "Quelle=%~1" 
set "Ziel=%~2"
ersetzen. Der Quellpfad darf übrigens nicht mit einem "\" enden.

Grüße
bastla
Bitte warten ..
Mitglied: sysroy
21.07.2009 um 13:39 Uhr
Hallo Bastla,

funktioniert hervorragend!

Für mich zum Verständnis:
":CopyFile" kehrt wegen "Call" und dem "goto :eof " zum Aufrufsort in der For - Schleife zurück, oder?

Zweite Unklarheit:
09: call set "PfadNeu=%%Pfad:%Quelle%=%%" - warum CALL?

Vielen Dank erstmal
sysroy
Bitte warten ..
Mitglied: bastla
21.07.2009 um 13:47 Uhr
Hallo sysroy!
Für mich zum Verständnis:
":CopyFile" kehrt wegen "Call" und dem "goto :eof " zum Aufrufsort in der For - Schleife zurück, oder?
Ja; würde es auch ohne "goto :eof", wenn danach kein weiterer Batch-Code folgt, ist so aber "sauberer".

Zweite Unklarheit:
09: call set "PfadNeu=%%Pfad:%Quelle%=%%" - warum CALL?
Da zuerst die Variable %Quelle% aufgelöst werden muss, könnte entweder "delayedExpansion" verwendet oder eben die Verarbeitung in einer weiteren CMD-Instanz (aufgerufen durch "call") vorgenommen werden - durch die doppelten %-Zeichen um die Variable "Pfad" herum wird diese als Variable übergeben, während für %Quelle% bereits der Wert eingesetzt wird, also im Prinzip:
set "PfadNeu=%Pfad:D:\Eigene Daten=%"
Grüße
bastla
Bitte warten ..
Mitglied: sysroy
21.07.2009 um 13:52 Uhr
Hallo Bastla,

Trick gelernt (Call) - prima.

Letzt Frage:

Was ist der Unterschied in der Parameterauswertung zwischen <set "Quelle=%~1"> mit Tilde und
<set "Quelle=%1"> ohne Tilde?

Danke
sysroy
Bitte warten ..
Mitglied: bastla
21.07.2009 um 13:55 Uhr
Was ist der Unterschied in der Parameterauswertung zwischen <set "Quelle=%~1"> mit Tilde und
<set "Quelle=%1"> ohne Tilde?
Mit der Schreibweise
set "Quelle=%~1"
ist sicher gestellt, dass %1 keine umgebenden Anführungszeichen enthält - wenn ich solche brauche, setze ich sie später im Batch um %Quelle% herum ...

Grüße
bastla
Bitte warten ..
Mitglied: sysroy
21.07.2009 um 14:11 Uhr
Und ich habe mich für diesen Zweck bis jetzt damit "geplagt":

:: die " " aus den Parametern entfernen
set pt1=%1
set pt1=%pt1:"=%


Frage hat sich gelohnt....

Nochmal vielen Dank für die schnelle und gute Hilfe

Grüße
sysroy
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
C und C++
Dateien in Ordner kopieren anhand vom Teil eines Dateinamen (22)

Frage von onlyforu8373 zum Thema C und C ...

Batch & Shell
Dateien kopieren die nicht mehr verändert werden? (10)

Frage von pbelcl zum Thema Batch & Shell ...

Windows Server
gelöst Administrator kann auf Server keine EXE-Dateien kopieren, löschen, anlegen (5)

Frage von Winfried-HH zum Thema Windows Server ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (10)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...