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

Batch - Backslash durch Slash ersetzen - Abfrage, ob der Ordner leer ist

Frage Entwicklung Batch & Shell

Mitglied: Dani

Dani (Level 5) - Jetzt verbinden

05.12.2008, aktualisiert 19:36 Uhr, 11448 Aufrufe, 6 Kommentare

Hallo @all,

ich schreibe monentan eine kl. Batchdatei um Dateien auf einen FTP-Server hochzuladen. Und zwar abhängig von lokalen Verzeichnisbaum. D.h. der FTP Server und die lokale Platte sind 1:1 gleich was die Struktur angeht.
D.h. die Dateien, die hochgeladen werden, müssen auf dem FTP-Server in das gleiche Verzeichnis wie lokal. An sich kein Problem, jedoch akzeptiert das FTP Command "cd" nur Slash's in Pfaden - was an sich ja nicht verkehrt ist.

Den Pfad habe ich bereits in einer Variablen und in dieser sollen nun alle Backslashes ("\") durch Slashes ("/") ersetzt werden. Ich habe es nochmal "bildlich" dargestellt:
01.
c:\demos\addons\safquards\data\bin
daraus soll folgendes werden:
01.
/demos/addons/safquards/data/bin
Ich hab mir schon diverse Schnipsel von Biber und bastla angeschaut, jedoch blick ich da nicht so ganz durch.


Gruss,
Dani
Mitglied: bastla
05.12.2008 um 14:49 Uhr
Hallo Dani!

Sollte so gehen:
01.
@echo off & setlocal 
02.
set "P1=c:\demos\addons\safquards\data\bin" 
03.
::Laufwerksanteil entfernen 
04.
for %%i in ("%P%") do set "P2=%%~pni" 
05.
::Ersetzung vornehmen 
06.
set "P=%P2:\=/%" 
07.
echo %P%
Grüße
bastla
Bitte warten ..
Mitglied: Dani
05.12.2008 um 16:16 Uhr
Hi bastla,
ah...wenn ich meinen Code so anschaue, war ich gar nicht so weit weg von dir. Läuft auf jeden Fall 1A.
Einen Fehler hast du aber drinne:

Zeile 6 sollte so ausschauen:
01.
for %%i in ("%P1%") do set "P2=%%~pni"
Nachdem ich nebenher weiter programmiert habe, stellt sich mir noch ein Problem. Kann ich mit "If" prüfen, ob in einem Ordner Dateien vorhanden sind oder läuft das auf eine Schleife raus?!


Gruss,
Dani
Bitte warten ..
Mitglied: bastla
05.12.2008 um 16:29 Uhr
Hallo Dani!

Einen Fehler hast du aber drinne:

Zeile 6 sollte so ausschauen:
Das kommt vom Verschlimmbessern beim Posten - ich wollte die "schöne" Variable %P% als Endergebnis, und habe daher das ursprüngliche P auf P1 geändert (allerdings in Zeile 4 ) ...

Kann ich mit "If" prüfen, ob in einem Ordner Dateien vorhanden sind oder läuft das auf eine Schleife raus?!
Weder - noch. Ich würde das so machen:
dir "D:\Ordner" /a-d >nul 2>&1 && echo Dateien enthalten
Grüße
bastla
Bitte warten ..
Mitglied: Dani
05.12.2008 um 17:10 Uhr
Hmm...irgendwo hab ich noch einen logischen Fehler drinne. So sieht mein Quellcode aus:
01.
for /f "delims=" %%i in ('dir /b /ad /s /l "c:\programme"') do ( 
02.
		 
03.
		rem Laufwerksbuchstaben samt Doppelpunkt löschen und in neue Variable speichern 
04.
		set "path_tmp=%%~pi" 
05.
		 
06.
		rem Backslash durch Slash ersetzen, da das FTP - Command "cd" nur mit Slash's geht 
07.
		set "test=%path_tmp:\=/%" 
08.
		 
09.
		rem Speichert das FTP - Kommando in die File 
10.
		echo cd "%test%" 
11.
		echo cd %%i
Dann sieht die Ausgabe so aus:
01.
cd "/programme/addons/datev/data/" 
02.
cd c:\programme\addons 
03.
cd "/programme/addons/datev/data/" 
04.
cd c:\programme\addons\datev 
05.
cd "/programme/addons/datev/data/" 
06.
cd c:\programme\addons\datev\configs 
07.
cd "/programme/addons/datev/data/" 
08.
cd c:\programme\addons\datev\data 
09.
cd "/programme/addons/datev/data/" 
10.
cd c:\programme\addons\datev\plugins 
11.
cd "/programme/addons/datev/data/" 
12.
cd c:\programme\addons\datev\data\lang
Wie man sieht, wiederholt sich alle 2 Zeilen ein Pfad. So sieht es aus, wenn ich "echo cd "%test%" auskommentiere:
01.
cd c:\programme\addons 
02.
cd c:\programme\addons\datev 
03.
cd c:\programme\addons\datev\configs 
04.
cd c:\programme\addons\datev\data 
05.
cd c:\programme\addons\datev\plugins 
06.
cd c:\programme\addons\datev\data\lang
Diese Zeilen entsprechenden der wahren Verzeichnisstruktur. Irgendwo wird eine Variable nicht überschrieben...oder?


Grüße,
Dani
Bitte warten ..
Mitglied: bastla
05.12.2008 um 17:18 Uhr
Hallo Dani!

DelayedExpansion ...

Alternative:
01.
for /f "delims=" %%i in ('dir /b /ad /s /l "c:\programme"') do call :ProcessDir "%%i" 
02.
goto :eof 
03.
		 
04.
:ProcessDir 
05.
rem Laufwerksbuchstaben samt Doppelpunkt löschen und in neue Variable speichern 
06.
set "path_tmp=%~p1" 
07.
		 
08.
rem Backslash durch Slash ersetzen, da das FTP - Command "cd" nur mit Slash's geht 
09.
set "test=%path_tmp:\=/%" 
10.
		 
11.
rem Speichert das FTP - Kommando in die File 
12.
echo cd "%test%" 
13.
echo cd %1 
14.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Dani
05.12.2008 um 19:36 Uhr
G' Abend bastla,
ich habe dich nicht vergessen....nach Stundenlanger Nachdenken und Probieren, geht nun das Script 1A. Einiges ist sicher noch verbesserungswürdig aber das interessiert mich heute mal nicht mehr. Anbei mal den ganzen Schnipsel:
01.
@echo off & setlocal EnableDelayedExpansion 
02.
 
03.
set ftp_servers=F:\FTP-Tool\ftp_servers.txt 
04.
 
05.
 
06.
rem FTP-Daten auslesen 
07.
for /f "tokens=1,2,3 delims=;" %%a in ('type %ftp_servers%') do ( 
08.
 
09.
	rem FTP Daten in die FTP-Auto-File schreiben 
10.
	echo open %%a>> "%temp%\ftp_upload_commands.txt" 
11.
	echo %%b>> "%temp%\ftp_upload_commands.txt" 
12.
	echo %%c>> "%temp%\ftp_upload_commands.txt" 
13.
 
14.
	rem Verzechnisse auslesen 
15.
	for /f "delims=" %%i in ('dir /b /ad /s /l "j:\programme"') do ( 
16.
		 
17.
		rem Laufwerksbuchstaben samt Doppelpunkt löschen und in neue Variable speichern 
18.
		set "linux_path=%%~pni" 
19.
		 
20.
		rem Backslash durch Slash ersetzen, da das FTP - Command "cd" nur mit Slash's geht 
21.
		 set "test=!linux_path:\=/!" 
22.
		 
23.
		rem Speichert das FTP - Kommando in die File 
24.
		 echo cd !test!>> "%temp%\ftp_upload_commands.txt" 
25.
 
26.
		rem Ausgabe von allen Files die sich im jeweiligen Ordner liegenq 
27.
		dir "%%i" /a-d >nul 2>&1 && for /f "delims=" %%k in ('dir /b /a-d /l %%i') do echo mput "%%i\%%k">> "%temp%\ftp_upload_commands.txt" 
28.
29.
	echo close >> "%temp%\ftp_upload_commands.txt" 
30.
31.
rem FTP Verbindung schließen 
32.
echo quit >> "%temp%\ftp_upload_commands.txt" 
33.
 
34.
rem Startet FTP Upload 
35.
ftp -d -i -s:"%temp%\ftp_upload_commands.txt" 
36.
 
37.
rem Löscht die FTP File 
38.
del "%temp%\ftp_upload_commands.txt" 
39.
 
40.
 
41.
pause
An dieser Stelle nochmal vielen Dank für deine Einbringungen...


Grüße,
Dani
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Per VBS Prog. beenden wenn Ordner leer (17)

Frage von Knuefi zum Thema Batch & Shell ...

Batch & Shell
gelöst Suchen und Ersetzen mehrerer Suchbegriffe per Batch (4)

Frage von makroll10 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...