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, 11686 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 ..
Ähnliche Inhalte
Batch & Shell
Powershell csv importiert keine backslashes (2)

Frage von Druide83 zum Thema Batch & Shell ...

Batch & Shell
gelöst Linie mit Leer überschreiben (Batch) (3)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst BATCH Zieldatei nach Shell-Befehl leer? (7)

Frage von freshman2017 zum Thema Batch & Shell ...

Datenbanken
gelöst SQL-Abfrage und leere Felder vermeiden (12)

Frage von zwangseinweisung zum Thema Datenbanken ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Server-Hardware
HP DL380 G7: Booten vom USB via USB 3.1-PCI-e Karte möglich? (24)

Frage von Paderman zum Thema Server-Hardware ...

Windows 7
Bluesreens unternehmensweit (19)

Frage von SYS64738 zum Thema Windows 7 ...

LAN, WAN, Wireless
IP Adressen - Modem - Switch - Accesspoint (17)

Frage von teuferl82 zum Thema LAN, WAN, Wireless ...

Windows 10
Programm Installation bei Win 10 Fehlerhaft (13)

Frage von Keineahnungvonnix zum Thema Windows 10 ...