Benötige jemanden der mir eine Dos Batch schreiben kann.


#1
Guten Abend in die Runde. Vorab ich habe null Ahnung in diesem Bereich.

Ich möchte das die Batch von meinem Programm eine Url in einem Dateinamen Speichert.

Vorab, es geht um ein Photo Booth Programm. Jedes Foto wird auf einen Server gespielt und das Programm erzeugt eine URL.

mit einem Dos Batch kann man diese Auslesen.

hier die Infos die ich habe:

Triggers/API

und es geht um den Befehl:
  • file_upload [file] [file_type] [album_name] - When a ...IST] hoffe es kann mir jemand helfen. Danke
 

Technipion

Erfahrenes Mitglied
#4
Auf der Seite die du verlinkt hast steht, dass im Prinzip auch ein Programm aufgerufen werden kann:
[appname.exe] [EventType] [param1?] [param2?]
Außerdem ist ja ein Beispiel für eine Batch angegeben:
Code:
:: contents of test.bat - make sure temp directory exists
@echo off
echo Batch File Started: %date% %time%
:: Optionally log the received event and params for event types
echo Batch file started  >> c:\temp\status.txt
echo Received event: %1 >> c:\temp\status.txt
echo Received param1: %2 >> c:\temp\status.txt
echo Received param2: %3 >> c:\temp\status.txt

:: Log the received event and params for a specific event type.
IF "%1"=="countdown_start" (
  echo "Countdown Started" >> c:\temp\countdown_only.txt 
)

:: Optionally log the current date and time
echo Completed: %date% %time%  >> c:\temp\status.txt
Ich möchte das die Batch von meinem Programm eine Url in einem Dateinamen Speichert.
Das ist jetzt natürlich ziemlich ungenau...
Wenn ich raten müsste, würde ich sagen du willst wahrscheinlich sowas in der Art hier:
Code:
@echo off
:: Das Verzeichnis C:\temp muss existieren!

IF "%1"=="file_upload" (
  :: Logge das ganze hier in eine Datei
  echo Speichere URL %3 für Datei %2 ab >> C:\temp\log.txt
 
  :: Speichere die URL ab im Format DATEINAME : URL
  echo %2 : %3 >> C:\temp\urls.txt
 
  :: Syntax:
  :: %2 ist [file]
  :: %3 ist [url]
  :: %4 ist [file_type]
  :: %5 ist [album_name]
)
Aber eigentlich müsstest du noch etwas genauer werden was du willst.

Gruß Technipion
 
#5
Hey habe es getestet läuft noch nicht.

Also ich habe wirklich null Ahnung davon.

Also mein Programm macht ein Foto und schiebt es automatisch auf den Foto server : www.fotoshare.co
Hier wird das Foto dann z.B. unter test-uplode abgelegt. Diese Adresse kann man mit dieser Funktion ermitteln (file_upload [file] [file_type] [album_name])

Die Batch muss mir dann z.B. im Ordner C:\temp jeweils eine neue Datei schreiben mit der URL als Dateiname. Am liebsten nur der letzte teil 287j237 und dann als jpg
 

Technipion

Erfahrenes Mitglied
#7
Okay, also du hast wie auf der verlinkten Seite beschrieben einen Trigger eingerichtet, der die Batch-Datei aufruft? Dann kannst du zum Testen mal meine Batch laufen lassen (nicht vergessen vorher einen Ordner temp auf Laufwerk C: anzulegen), und ein Bild hochladen. Es müssten dabei zwei neue Dateien entstehen: C:\temp\log.txt und C:\temp\urls.txt

Wenn das funktioniert, wissen wir immerhin schonmal, dass alles richtig eingerichtet ist.
Wie man eine URL aufteilt, habe ich hier gefunden: How do I break apart a URL to its component parts in Batch?

Eine Frage hätte ich da allerdings noch.
Am liebsten nur der letzte teil 287j237 und dann als jpg
Was heißt "dann als jpg"? Soll die Datei im Prinzip eine Kopie des Originals sein? (Dann müsste man ja die ursprüngliche Datei einfach nach C:\temp\XYZ.jpg kopieren...)

Gruß Technipion
 
#9
Die url soll ja der Dateiname sein. es geht nur um den Namen nicht um das Bild. aber mein anderes Programm das den Ordner überwachen soll kann nur jpg ermitteln und den Dateinamen ausdrucken.
das heisst es muss jedes mal eine neue Datei im Ordner sein mit 287j237.jpg 287j237 ist jeweils der link name
 

Technipion

Erfahrenes Mitglied
#10
Das ist komisch.

Öffne mal eine Konsole (Shift gedrückt halten und Rechtsklick auf den Desktop -> "Command hier öffnen" oder "Powershell hier öffnen") und gib folgendes ein:
Upload.bat file_upload Dateiname Url

Dann müsste eigentlich was in C:\temp ankommen.
 

ComFreek

Mod | @comfreek
Moderator
#12
Mmmhhhh keine Ahnung würde mir so vom Programm Hersteller gesagt
Dann brauchst du es wahrscheinlich nicht. Das sieht mir nämlich so aus, dass du sein Programm nur aufrufen müsstest. Theoretisch kannst du das auch von Haskell, JavaScript (Node.js) oder auch Assembler mit Syscalls.

URL-Aufteilung in Batch :rolleyes: Ich würde echt dazu raten, das in zumindest in PowerShell zu tun. Vielleicht kann ich mir das morgen mal ansehen und dir helfen ;)
 

Technipion

Erfahrenes Mitglied
#14
Ja okay tut mir leid, ich bin dumm.

Ich konnte jetzt zu Hause endlich am Windows-Rechner rumprobieren, und Batch scheint das wohl gar nicht zu mögen wenn vor der schließenden Klammer Kommentare stehen...

Also Lars, hier ist eine Batch zum testen:
Code:
@echo off
:: Das Verzeichnis C:\temp muss existieren!

IF NOT "%1"=="file_upload" (
  echo Dieses Script ist nur mit file_upload verwendbar!
  EXIT
)

setlocal EnableDelayedExpansion
set "url=%3"

for %%a in ("%url%") do (
  set "urlPath=!url:%%~NXa=!"
  set "urlName=%%~NXa"
)

set "extension=%~x2"
set "fileName=C:\temp\%urlName%%extension%"

:: Logge das ganze hier in eine Datei
echo Kopiere %2 nach %filename% >> C:\temp\log.txt

:: Kopiere die Bilddatei
copy "%2" "%fileName%"
Denk dran: C:\temp muss vorhanden sein.
Diese Batch sollte dann, sobald du eine Datei hochlädst, eine Kopie der Datei unter C:\temp\XYZ.abc anlegen, wobei XYZ die ID aus der URL und abc die Dateiendung ist.

Meld dich wenn etwas nicht klappt.

Gruß Technipion
 
#16
Guten Abend !!
Technipion hat mir damals sehr gut geholfen !!!

Leider kopiert die batch das Bild nicht mehr in den Temp Ordner !
In die Log schreibt er alles Glaube ich !

Hier mal die Batch

@Echo off
:: Das Verzeichnis C:\temp muss existieren!

IF NOT "%1"=="file_upload" (
echo Dieses Script ist nur mit file_upload verwendbar!
EXIT
)

setlocal EnableDelayedExpansion
set "url=%4"

for %%a in ("%url%") do (
set "urlPath=!url:%%~NXa=!"
set "urlName=%%~NXa"
)

set "extension=%~x2"
set "fileName=C:\temp\%urlName%%extension%"

:: Logge das ganze hier in eine Datei
echo Kopiere %2 nach %filename% >> C:\temp\log.txt

:: Kopiere die Bilddatei
copy "%2" "%fileName%"

________________________________________________________________________
und das steht in der Log:
Kopiere Dateiname nach C:\temp\Url
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\20190328_225714_771.jpg
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\20190328_230553_049.jpg
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\Stage
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\3chhttn
Kopiere X\Prints\20190328_233108_155.jpg nach C:\temp\2aj8yk3
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\3z9vw87
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\3t3z4xq
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\21pjwpq
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\437nfej
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\Stage X
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\3hqmd6z



Das war der Ausgangsbefehl :

file_upload [file] [file_type] [album_name] - When a ...oud hosting site. Danke schonmal im vorraus
 

Technipion

Erfahrenes Mitglied
#17
und das steht in der Log:
Kopiere Dateiname nach C:\temp\Url
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\20190328_225714_771.jpg
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\20190328_230553_049.jpg
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\Stage
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\3chhttn
Kopiere X\Prints\20190328_233108_155.jpg nach C:\temp\2aj8yk3
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\3z9vw87
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\3t3z4xq
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\21pjwpq
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\437nfej
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\Stage X
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\3hqmd6z
Irgendwie sieht das kaputt aus. Kannst du die Logfile vielleicht mal als Datei hochladen?

Hast du irgendetwas verändert? Vielleicht Leerzeichen in den Dateinamen oder sowas? Ist schon komisch, dass es vorher ging und jetzt einfach kaputt ist.

Gruß Technipion
 
#18
Guten Morgen,

musste nur
setlocal EnableDelayedExpansion
set "url=%4" non 3 auf 4 ändern da die das Programm wohl geändert haben und das dann wieder die richtige pin kommt
 

Anhänge

Technipion

Erfahrenes Mitglied
#19
Ah okay, also geht es jetzt wieder?

Wenn die natürlich einfach die Syntax des Calls ändern können wir ja nichts dafür. Eigentlich ist das aber ganz schlechter Stil, denn so kann man schnell mal die Systeme von all seinen Kunden zerschießen...

Gruß Technipion
 

Neue Beiträge