katze78 11 Geschrieben 23. Mai 2009 Melden Teilen Geschrieben 23. Mai 2009 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 Zitieren Link zu diesem Kommentar
mahn 10 Geschrieben 26. Mai 2009 Melden Teilen Geschrieben 26. Mai 2009 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} Zitieren Link zu diesem Kommentar
katze78 11 Geschrieben 7. Juni 2009 Autor Melden Teilen Geschrieben 7. Juni 2009 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 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.