Jump to content

Auflistungs fehler


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

hallo zusammen

ich habe ein BAT/CMD geschrieben.

Es funktioniert nicht so ganz wie ich mir dies vorstelle.

 

 

Verzeichnis auslesen:

 

Code:

REM Build transfer Template

echo open 127.0.0.1 > transfer.ftp

echo user >> transfer.ftp

echo password >> transfer.ftp

REM create root directory

echo mkdir test >> transfer.ftp

REM Build Directory Structure

for /f "tokens=1,2,3,4 delims=\" %%a in ('dir C:\test\transfer /ad /o /b /s') do @echo mkdir %%b\%%c\%%d >> transfer.ftp

REM create transfer list

for /f "tokens=1,2,3,4,5 delims=\" %%A in ('dir C:\test\transfer /a-d /o /b /s') do @echo send %%~pfB%%~pC%%C%%~pD%%D%%~pE%%E %%~B%%~pC%%C%%~pD%%D%%~pE%%E >> transfer.ftp

hier der erfolgreiche versuch:

echo quit >> transfer.ftp

echo by >> transfer.ftp

 

 

 

 

Das Resultat dieser Datei siehst so aus:

 

open 127.0.0.1

user

password

mkdir test

mkdir test\transfer\test1

mkdir test\transfer\test2

send C:\test\test\test\transfer\test\test1\test\testdatei.txt test\test\transfer\test\test1\test\testdatei.txt

send C:\test\test\test\transfer\test\test2\test\a.rtf test\test\transfer\test\test2\test\a.rtf

send C:\test\test\test\transfer\test\test2\test\hallo yves.wav test\test\transfer\test\test2\test\hallo yves.wav

send C:\test\test\test\transfer\test\test2\test\testdatei1.wav test\test\transfer\test\test2\test\testdatei1.wav

quit

bye

 

 

 

 

Es sollte aber so aussehen:

 

open 127.0.0.1

user

password

mkdir test

mkdir test\transfer\test1

mkdir test\transfer\test2

send C:\test\test1\testdatei.txt

send C:\test\transfer\test2\a.rtf

send C:\test\transfer\test2\hallo yves.wav

send C:\test\transfer\test2\testdatei1.wav

quit

by

 

 

wo ist mein denkfehler, das er mir dies so komisch darstellt?

den so kann ich den fefehlt

 

ftp -s:xtrans.ftp

 

 

nicht ausführen, da er die dateien nicht findet

wäre toll, wenns gehen würde

Link zu diesem Kommentar

Hi! Vielleicht solltest du auf Powershell umstellen. Hier ein paar Gedankenanstöße zu deinem Script:

 

Alle Ordner unterhalb des Quellordners auflisten und "mkdir" vorausstellen:

gci c:\test\transfer -recurse -filter * | ? { $_.PSisContainer -eq $true} | % { write-host "mkdir" ($_.fullname -replace "c:\\test\\transfer\\","") }

 

Alle Dateien unterhalb des Quellordners auflisten und "send" vorausstellen:

gci c:\test\transfer -recurse -filter * | ? { $_.PSisContainer -eq $false} | % { write-host "send" $_.fullname}

Link zu diesem Kommentar
  • 2 Wochen später...

Der Transfer geht nun einwandfrei.

wie müsste ich den befehl umbauen, das er mir NUR die neuen Daten transferiert, welche noch nicht auf dem FTP ist.

Den das Verzeichniss wird immer mehr wachsen und sonst wird er immer länger haben, ob wohl vielleicht nur 2-3dateien neu sind.

 

jetztiger befehl.

 

@echo off & setlocal

set "BasePath=c:\test

REM ftp-Steuerdatei im Verzeichnis der Batchdatei erstellen

set "ftp=%~dp0ftpliste.ftp"

REM Alternativ dazu kann ntürlich auch ein absoluter Pfad angegeben werden

REM set "ftp=C:\test\ftpliste.ftp"

 

REM Absluten Pfadanteil entfernen

for %%i in ("%BasePath%") do set "RemoveAbs=%%~dpi"

REM FTP Liste Löschen

del "%ftp%" 2>nul

REM FTP Liste erstellen

>>"%ftp%" echo open ftp.domain.ch

>>"%ftp%" echo test

>>"%ftp%" echo test

REM create root directory

for %%i in ("%BasePath%") do >>"%ftp%" echo mkdir "%%~nxi"

REM Build Directory Structure

for /f "delims=" %%i in ('dir "%BasePath%" /ad /o /b /s') do call :ProcessDir "%%i"

REM create transfer list

for /f "delims=" %%i in ('dir "%BasePath%" /a-d /o /b /s') do call :ProcessFile "%%i"

>>"%ftp%" echo bye

ftp -s:ftpliste.ftp

 

goto :eof

 

:ProcessDir

set "AbsPath=%~1"

call set "RelPath=%%AbsPath:%RemoveAbs%=%%"

>>"%ftp%" echo mkdir "%RelPath%"

goto :eof

 

:ProcessFile

set "AbsPath=%~1"

call set "RelPath=%%AbsPath:%RemoveAbs%=%%"

>>"%ftp%" echo send %1 "%RelPath%"

goto :eof

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...