Seite 1 von 1

[ Erledigt ] Batch Datei lange Dateinamen

Verfasst: 13.12.2016 13:25
von udg
Hallo,
ich habe gestern Abend eine kleine BAT Datei verfasst die via Kontextmenü - rechtsklick Maustaste auf JPG Datei - senden an FTP machen soll.

Nun habe ich das alles verfasst und feststellen müssen, dass Dateinamen die länger als 36 Zeichen sind ab dem 37. Zeichen abgeschnitten werden.

EDIT:
Batch verworfen und in PureBasic geschrieben. Siehe letzter Beitrag

NACHTRAG:
Habe gerade festgestellt, dass das 37. Zeichen ein "&" Zeichen ist. Die Batch verarbeitet dieses nicht und bricht ab dort, den Dateinamen ab und weiter zu schreiben.
Wie mache ich klar das "&" Zeichen als normaler Text anzusehen ist?

Es soll mir also jegliche Dateinamenlänge auf meinen FTP hochschicken.

Code: Alles auswählen

Mode con cols=100 lines=60
COLOR 2F

set tempftp=%temp%\dnbupload%\fileserver.ftp

:# ftp-skript erzeugen
echo OPEN meinFTPPfad > %tempftp%
echo USER userName Passwort >> %tempftp%
echo hash >> %tempftp%
echo binary >> %tempftp%
echo cd public >> %tempftp%
echo cd images >> %tempftp%
echo cd track >> %tempftp%
echo send %1 >> %tempftp%
echo disconnect >> %tempftp%
echo quit >> %tempftp%

:# alles ausführen
ftp.exe -n -i -s:%tempftp%
:# del %tempftp%
der Dateiname wird in eine *.ftp Datei geschrieben jedoch nur 36 Zeichen davon :(

Beispiel:
Dateiname ist: Innerground_Records_INN042_Dj_Marky_&_SPY_Brainstorm_A_Side.jpg
übernommen wird aber nur: Innerground_Records_INN042_Dj_Marky_

Danke für evtlle Hilfe

Gibt es keine zufriedenstellende Option, muss ich das Ganze in PB schreiben.

Re: Batch Datei lange Dateinamen

Verfasst: 13.12.2016 13:30
von _JON_
Das Problem wird wohl das "&" Sein, setzt die variable mal in Anführungszeichen'.

Re: Batch Datei lange Dateinamen

Verfasst: 13.12.2016 13:31
von udg
_JON_ hat geschrieben:Das Problem wird wohl das "&" Sein, setzt die variable mal in Anführungszeichen'.
Stimmt. habe es wärend deines Postes bemerkt und eine EDIT eingetragen.

Wie setz ich das in " "?

Re: Batch Datei lange Dateinamen

Verfasst: 13.12.2016 13:42
von NicTheQuick

Re: Batch Datei lange Dateinamen

Verfasst: 13.12.2016 14:15
von udg
:wink:
da war ich auch schon aber bringt mir keinen Erfolg. Dateiname wird nachwievor bei "&" abgeschnitten

Re: Batch Datei lange Dateinamen

Verfasst: 13.12.2016 17:06
von man-in-black
Hi,

im dümmsten Fall musst du die Sonderzeichen codieren. Also durch zulässige Zeichen ausdrücken (rename).
Das kann aber auch nach hinten los gehen, wenn wiedererwartend genau solche Fragmente bereits im Namen enthalten sind.

MFG
MIB

Re: Batch Datei lange Dateinamen

Verfasst: 13.12.2016 18:56
von udg
Das ganze ist mir zu unsicher. Die Namen kommen in eine Datenbank und müssen mit anderen Dateien übereinstimmen. Jede hochgeladene jpg Datei nochmal auf dem Server manuell zu prüfen erleichtert die Arbeit nicht. Da kann ich auch bei meinem ftp Programm bleiben.

Ich verwerfe das batch Ding und werd es in PB versuchen. Da sollte es ja keine Probleme geben mit Länge eines Dateinamen.

Re: Batch Datei lange Dateinamen

Verfasst: 17.12.2016 15:19
von udg
So, Projekt abgeschlossen.
Dank HeX0R's Gerippe:

Code: Alles auswählen

InitNetwork()

Enumeration
   #String_FTP_Server
   #String_FTP_User
   #String_FTP_Password
   #String_FTP_UploadFile
   #Button_FTP_BrowseUploadFile
   #String_FTP_PathOnServer
   #Editor_Log
   #Button_StartUpload
EndEnumeration

Global SIZE_OF_FTP_FILE.q
Global START_OF_UPLOAD.i

Procedure.s ByteRechner(dSize.d, Decimals.i = 2)
   Protected Namen.s = "kMGTPEZY", *C.CHARACTER, Result.s = "0"

   If dSize > 0.0
      If dSize < 1024
         Result = StrD(dSize, Decimals) + " " + "Byte"
      Else
         dSize / 1024
         *C = @Namen
         While dSize > 1024 And *C\c <> 0
            dSize / 1024
            *C + SizeOf(CHARACTER)
         Wend
         Result = StrD(dSize, Decimals) + " " + Chr(*C\c) + "Byte"
      EndIf
   EndIf
   
   ProcedureReturn Result
EndProcedure

Procedure GadgetEvent_BrowseUploadFile()
   Protected a$
   
   a$ = OpenFileRequester("Select Upload File", "bla.rar", "All files (*.*)|*.*", 0)
   If a$
      SetGadgetText(#String_FTP_UploadFile, a$)
   EndIf
EndProcedure

Procedure GadgetEvent_StartUpload()
   Protected Path.s, i, Result
   
   If GetGadgetText(#String_FTP_PathOnServer) And GetGadgetText(#String_FTP_Server) And GetGadgetText(#String_FTP_UploadFile)
     
      If OpenFTP(0, GetGadgetText(#String_FTP_Server), GetGadgetText(#String_FTP_User), GetGadgetText(#String_FTP_Password)) = 0
         AddGadgetItem(#Editor_Log, -1, "Unable to connect to Server!")
      Else
         Path   = GetGadgetText(#String_FTP_PathOnServer)
         Result = #True
         If Left(Path, 1) <> "/"
            Path = "/" + Path
         EndIf
         For i = 1 To CountString(Path, "/")
            If SetFTPDirectory(0, StringField(Path, i + 1, "/")) = 0
               AddGadgetItem(#Editor_Log, -1, "Error! Can't get into " + StringField(Path, i + 1, "/") + "!")
               Break
            Else
               AddGadgetItem(#Editor_Log, -1, "Set Directory to " + StringField(Path, i + 1, "/"))
            EndIf
         Next i
         SIZE_OF_FTP_FILE = FileSize(GetGadgetText(#String_FTP_UploadFile))
         If SendFTPFile(0, GetGadgetText(#String_FTP_UploadFile), GetFilePart(GetGadgetText(#String_FTP_UploadFile)), #True) = 0
            Result = #False
            AddGadgetItem(#Editor_Log, -1, "Error! Can't upload file: " + GetGadgetText(#String_FTP_UploadFile) + "!")
         EndIf
         
         If Result = #False
            CloseFTP(0)
            SIZE_OF_FTP_FILE = #Null
         Else
            DisableGadget(#Button_StartUpload, 1)
            StatusBarProgress(0, 0, 0)
            START_OF_UPLOAD = ElapsedMilliseconds()
         EndIf
      EndIf
   EndIf
   
EndProcedure

Procedure MyTimerEvent()
   Protected q.q, speed.d, d.d
   
   If IsFTP(0)
      q = FTPProgress(0)
      Select q
         Case #PB_FTP_Started
            ;reset our time var
            START_OF_UPLOAD = ElapsedMilliseconds()
         Case #PB_FTP_Finished
            ;finished, close ftp and add speed info
            speed = SIZE_OF_FTP_FILE / ((ElapsedMilliseconds() - START_OF_UPLOAD) / 1000)
            AddGadgetItem(#Editor_Log, -1, "Speed: " + ByteRechner(Speed) + "/s")
            StatusBarProgress(0, 0, 100)
            CloseFTP(0)
            DisableGadget(#Button_StartUpload, 0)
         Case #PB_FTP_Error
            AddGadgetItem(#Editor_Log, -1, "An error occured while uploading!")
            StatusBarProgress(0, 0, 100)
            CloseFTP(0)
            DisableGadget(#Button_StartUpload, 0)
         Default
            d = 100 * (q / SIZE_OF_FTP_FILE)
            StatusBarProgress(0, 0, d)
      EndSelect
   EndIf
   
EndProcedure

Procedure main()
   
   OpenWindow(0, 0, 0, 330, 460, "FTP-Upload-Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
   
   TextGadget(#PB_Any, 5, 5, 100, 20, "FTP-Server:")
   StringGadget(#String_FTP_Server, 110, 5, 160, 22, "")
   TextGadget(#PB_Any, 5, 30, 100, 20, "Username:")
   StringGadget(#String_FTP_User, 110, 30, 160, 22, "")
   TextGadget(#PB_Any, 5, 55, 100, 20, "Password:")
   StringGadget(#String_FTP_Password, 110, 55, 160, 22, "")
   TextGadget(#PB_Any, 5, 80, 100, 20, "Upload-File:")
   StringGadget(#String_FTP_UploadFile, 110, 80, 160, 22, "")
   ButtonGadget(#Button_FTP_BrowseUploadFile, 275, 80, 40, 22, "...")
   TextGadget(#PB_Any, 5, 105, 100, 20, "Path on Server:")
   StringGadget(#String_FTP_PathOnServer, 110, 105, 160, 22, "/public")
   
   ButtonGadget(#Button_StartUpload, 110, 140, 80, 26, "Start Upload")
   
   EditorGadget(#Editor_Log, 5, 180, 320, 250, #PB_Editor_ReadOnly)
   
   CreateStatusBar(0, WindowID(0))
   AddStatusBarField(#PB_Ignore)
   AddWindowTimer(0, 0, 10)
   
   BindGadgetEvent(#Button_FTP_BrowseUploadFile, @GadgetEvent_BrowseUploadFile())
   BindGadgetEvent(#Button_StartUpload, @GadgetEvent_StartUpload())
   BindEvent(#PB_Event_Timer, @MyTimerEvent())
   
   While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
   
   If IsFTP(0)
      CloseFTP(0)
   EndIf
EndProcedure

main()
meiner Wenigkeit und Bisonte :allright: funktioniert das Tool jetzt wie es soll.

Rechtsklick auf eine Grafikdatei oder was auch immer und Kontextmenü - senden an - FTP.

Habe weiterhin noch Drag n Drop auf das Stringgadget gelegt, sodass ich auch dateien reinziehen kann und danach upload.

hier noch 2 Screens

Bild Bild