[ Erledigt ] Batch Datei lange Dateinamen

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

[ Erledigt ] Batch Datei lange Dateinamen

Beitrag 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.
Zuletzt geändert von udg am 18.04.2018 00:28, insgesamt 5-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Batch Datei lange Dateinamen

Beitrag von _JON_ »

Das Problem wird wohl das "&" Sein, setzt die variable mal in Anführungszeichen'.
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: Batch Datei lange Dateinamen

Beitrag 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 " "?
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Batch Datei lange Dateinamen

Beitrag von NicTheQuick »

Bild
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: Batch Datei lange Dateinamen

Beitrag von udg »

:wink:
da war ich auch schon aber bringt mir keinen Erfolg. Dateiname wird nachwievor bei "&" abgeschnitten
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Batch Datei lange Dateinamen

Beitrag 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
(hab alles, kann alles, weiß alles!!^^)

Bild
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: Batch Datei lange Dateinamen

Beitrag 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.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: Batch Datei lange Dateinamen

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten