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



## LarsPB (30. Januar 2019)

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


----------



## ComFreek (31. Januar 2019)

Warum Batch? Warum nicht eine modernere Sprache?


----------



## LarsPB (31. Januar 2019)

Mmmhhhh keine Ahnung  würde mir so vom Programm Hersteller gesagt


----------



## Technipion (31. Januar 2019)

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:

```
:: 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
```



LarsPB hat gesagt.:


> 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:

```
@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


----------



## LarsPB (31. Januar 2019)

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


----------



## LarsPB (31. Januar 2019)

Vielen Dank schonmal für die Tolle Unterstützung hier !!!!!


----------



## Technipion (31. Januar 2019)

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.


LarsPB hat gesagt.:


> 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


----------



## LarsPB (31. Januar 2019)

Leider passiert noch nix hier mal ein paar Bilder

1. die TXT datei
2. umgewandelt in .bat
3. hier wird sie aufgerufen

im Ordner temp ändert sich nix


----------



## LarsPB (31. Januar 2019)

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 (31. Januar 2019)

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.


----------



## LarsPB (31. Januar 2019)

")" kann syntaktisch an dieser stelle nicht verarbeitet werden


----------



## ComFreek (31. Januar 2019)

LarsPB hat gesagt.:


> 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.



Technipion hat gesagt.:


> Wie man eine URL aufteilt, habe ich hier gefunden: How do I break apart a URL to its component parts in Batch?


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


----------



## LarsPB (31. Januar 2019)

Verstehe nur Bahnhof,  Lichttechnik Tontechnik Strom Buchhaltung usw das ist meins aber keine Programmiersprache !!!   Ich bin euch hoffnungslos ausgeliefert !


----------



## Technipion (31. Januar 2019)

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:

```
@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


----------



## LarsPB (31. Januar 2019)

WOW WOW WOW Mega !!! Danke Danke Danke Ihr Seid der Wahnsinn hier ! 

Tausend DANK TECHNIPION

Werde jetzt ein wenig rum Probieren denke aber das passt so alles danke !!


----------



## LarsPB (28. März 2019)

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 (29. März 2019)

LarsPB hat gesagt.:


> 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
> ...


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


----------



## LarsPB (29. März 2019)

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


----------



## Technipion (29. März 2019)

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


----------



## LarsPB (29. März 2019)

Nein geht leider noch nicht ! Sehe nur in der log das er was macht aber es erscheint keine .jpeg im temp Ordner


----------



## Technipion (29. März 2019)

Sorry, mein Fehler.
Das Log ist voll mit solchen Zeilen hier:

```
Kopiere C:\Users\Nuc\Pictures\dslrBooth\Stage nach C:\temp\3z9vw87
```
Das macht mich stutzig. Wie ist denn der vollständige Name des Ordners bei C:\Users\Nuc\Pictures\dslrBooth\Stage? Heißt der Ordner nur "Stage" oder z.B. "Stage XYZ"? Könnte etwas mit Leerzeichen im Dateinamen zu tun haben.


----------



## LarsPB (29. März 2019)

Danke geht wieder lag wohl an mir ;-) Leerzeichen kann das Programm nicht verarbeiten.

Die batch läuft Einwand frei Danke schönes Wochenende


----------



## EuroCent (3. April 2019)

Wen man Ordner ansprechend möchte, muss dies in der Regel geparst werden.
In der URL ist es %20. Im CMD ist es selten mit Double-Quotes "DEINE URL".

Ich mache viel zu wenig mit Batch oder PowerShell dass ich das nicht ganz hilfreich sein kann.


----------



## Technipion (3. April 2019)

EuroCent hat gesagt.:


> Ich mache viel zu wenig mit Batch oder PowerShell dass ich das nicht ganz hilfreich sein kann.


Ich auch. Wenn es um rein routinemäßige administrative Tasks geht, benutze ich eigentlich nur sh-Abkömmlinge, weil das bei mir alles auf Linux-Systemen läuft. Werden die Aufgaben anspruchsvoller wird meist zu Python gewechselt. @LarsPB das wäre übrigens das nächste gewesen, was ich dir geraten hätte.

Offtopic:
Auf Windows Skripte in Batch und PowerShell zu schreiben halte ich persönlich ehrlichgesagt für sehr gefährlich. Die meisten Anwendungen kümmern sich nicht um die Einhaltung gewisser Standards (auf Linux wird z.B. nicht einfach die Reihenfolge von Parametern geänder, im Windows-Stil schon). Außerdem ist die ganze PowerShell-Geschichte noch ziemlich buggy. Hatte da mal einen Kurs belegt. Ich erinnere mich noch genau daran, ist jetzt knapp 2 Jahre her. Bin da mit der Einstellung rein: "Bash ist geil, aber alles was auf Windows läuft und mit der Kommandozeile zu tun hat ist schrecklich. Change my mind..."
Der Dozent wollte mich davon überzeugen wie toll alles geworden ist und hat mit der Hilfefunktion von PowerShell angefangen. Bei Linux "man <cmd>" oder "info <cmd>". Geht out-of-the-box. Bei PowerShell musste er zunächst die Hilfedateien downloaden... 
Jedenfalls haut der (mit Administratorrechten) ein "Update-Help" rein und nach ein paar Sekunden läuft das ganze Fenster mit roten Fehlermeldungen voll. Ich habe ihm dann 2 Minuten dabei zugeschaut, wie er versucht hat das Problem zu fixen. Dann bin ich wortlos aufgestanden und gegangen. Nicht mal die integrierte Hilfe geht...

Ich kann bis heute kein PowerShell


----------



## ComFreek (3. April 2019)

Als kleiner PowerShell-Verfechter muss ich da mal nachhaken 



Technipion hat gesagt.:


> Die meisten Anwendungen kümmern sich nicht um die Einhaltung gewisser Standards


Welche Anwendungen meinst du genau?



Technipion hat gesagt.:


> auf Linux wird z.B. nicht einfach die Reihenfolge von Parametern geänder


Dass Kommandozeilenparameter reihenfolgebehaftet sind, hat mich übrigens schon immer verwirrt  Insbesondere bei Linkflags mit GCC kann das zu langen Debuggingsessions führen.



Technipion hat gesagt.:


> Geht out-of-the-box. Bei PowerShell musste er zunächst die Hilfedateien downloaden...


Dafür gibt es Get-Help:

```
Get-Help Get-ChildItem -Online
```



Technipion hat gesagt.:


> Jedenfalls haut der (mit Administratorrechten) ein "Update-Help" rein und nach ein paar Sekunden läuft das ganze Fenster mit roten Fehlermeldungen voll. Ich habe ihm dann 2 Minuten dabei zugeschaut, wie er versucht hat das Problem zu fixen.


Diese Fehler kenne ich, aber das ist eine einmalige Sache. Mit dem -Online Parameter kommst du auch ohne Download direkt auf die MS-Doku im Browser.


----------



## LarsPB (3. April 2019)

Läuft jetzt alles soweit !!! Tausend dank !!


----------

