Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

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

Mitglied: Dani

Dani (Level 5) - Jetzt verbinden

05.12.2008, aktualisiert 19:36 Uhr, 11836 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
Datenbanken
SQL-Abfrage und leere Felder vermeiden
gelöst Frage von zwangseinweisungDatenbanken12 Kommentare

Hallo, ich mache grade eine Ausbildung zum Fi-Si und vor dem Weihnachtsurlaub haben wir im Fach Datenbanken noch eine ...

Batch & Shell
Verknüpfungen von leeren Ordnern löschen
Frage von AmiKegoBatch & Shell2 Kommentare

Hallo, ich schreibe gerade ein Skript mit Batch das leere Ordner mit Unterordner löscht. Jetzt will ich es ein ...

Batch & Shell
Linie mit Leer überschreiben (Batch)
gelöst Frage von clragonBatch & Shell3 Kommentare

Hey ihr Batch-ler da draußen! Ich entwickle grad meinen Eigenen Batch Safe auf Professionellem Level, also ECHTE Verschlüsselungen ( ...

Debian
Lokalen Ordner durch Netzlaufwerkfreigabe ersetzen
Frage von spelliDebian7 Kommentare

Hallo, ich habe hier ein Debian 64Bit. Darauf läuft eine Anwendung wobei ich an dem Gesamtsystem nichts weiter ändern ...

Neue Wissensbeiträge
Router & Routing

PfSense als Addon auf QNAP

Information von magicteddy vor 12 StundenRouter & Routing2 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 18 StundenDatenschutz

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 23 StundenMicrosoft1 Kommentar

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 3 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement22 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk13 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...

Windows Server
Terminal Server 2016 erkennt Berechtigungen nicht
gelöst Frage von Thomas2Windows Server10 Kommentare

Hallo Administratoren, folgendes Problem stellt sich dar: Es gibt zwei Windows Server 2016, die als Terminal Server fungieren. Jetzt ...

Sonstige Systeme
7-zip: Programm frägt nach Passwort erst bei einzelnen Dateien
Frage von freeskierchrisSonstige Systeme7 Kommentare

Guten Morgen, ich habe ein Problem beim Arbeiten mit 7-zip: Wenn ich die einzelnen Dateien zu einem Archiv verpacke ...