2017-03-14 7 views
0

Ich habe ein Programm mit dem Namen Schwelle. Ich habe eine Reihe von Bildern in einem Verzeichnis namens Bilder.Skript, das Dateinamen als Argumente an die Funktion übergeben

|-- images 
| -----img_1.jpg 
| -----img_2.jpg 
| -----img_3.jpg 
| ------ 
| ------img_n.jpeg 
|-- threshold.exe 
|-- myscript 

Wie ein Bash-Skript zu schreiben, so dass es die Verzeichnisnamen als Argument akzeptiert und jeden der Dateien im Verzeichnis einzeln als Argument threshold.exe zu programmieren passieren.

Wenn ich ausführen,

$./myscript images 

Die endgültige Ausführung so sein sollte.

./threshold.exe img_1.jpg
./threshold.exe img_2.jpg
....
....
./threshold.exe img_n.jpg

+1

Was haben Sie für sich selbst versucht/ – Inian

+0

Nach dem Ausführen Ihrer Batchdatei stehen Ihnen "interne" Variablen zur Verfügung. Annahme einer Batch-Datei "DoIt.bat". Ein Aufruf wie dieser 'doit.bat" c: \ Ordnerpfad \ zu \ wo immer "' speichert den '' c: \ Ordnerpfad \ zu \ wo immer "' Argument zur Variablen% 1. Daher würden Sie dann die Dateiliste von% 1 abfragen und jede Datei an 'threshold @ file' übergeben. [ForFiles] (https://ss64.com/nt/forfiles.html)/[Stapelparameter] (https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ percent.mspx? mfr = true) Viel Spaß. Probieren Sie es aus, veröffentlichen Sie Ihren Code und wir helfen Ihnen, weiter zu kommen. Sind Sie in Windows? –

+0

So etwas wie 'für %% i in (Pfad zu Verzeichnis \ * .jpg) do threshold.exe %% i' das sollte funktionieren, denke ich .. –

Antwort

0

Sie sind in einer Windows-Umgebung Unter der Annahme.

forfiles /p %1 /m *.jpg /c "cmd /c threshold.exe @file" 

-Für jede Datei im Pfad (/p)% 1

-Wo% 1 ist der übergebene Parameter, auch bekannt als der Ordner, den Sie in

-Run Befehl gesucht werden soll (/c) cmd /c threshold.exe @file

-Wo @file stellt den Pfad der jPG-Datei

+0

Da das OP eine "bash" -Frage statt einer "Batch" -Frage stellt und '. /' Verwendet, um ihr Programm zu starten, sieht das nicht nach einer sicheren Annahme aus. –

+0

(... obwohl die '.exe'-Erweiterung ein wenig in Konflikt steht, ist es nicht sicher - CLR-ausführbare Dateien laufen mit Mono auf Ihrem Unixen oder PE-Dateien, die mit Wine ausgeführt werden, werden im Allgemeinen immer mit intakten Erweiterungen installiert). –

+0

@CharlesDuffy, basierend auf den gleichen Warteschlangen Ich bin mir ziemlich sicher, dass er nicht Windows läuft. Hoffentlich kann diese Information immer noch helfen, er oder jemand auf der Suche nach einer ähnlichen Antwort. –

0
#!/bin/bash 
for dir; do 
    for f in "$dir"/*; do 
    ./threshold.exe "$f" 
    done 
done 

Dies verhält sich wie folgt:

  • Zuerst iteriert über Kommandozeilenargumente, die jeweils als Verzeichnis Behandlung
  • nächstes iteriert über Dateien im aktuellen Verzeichnis
  • dann die ausführbare Datei für jeden Anruf Datei

Beachten Sie, dass diese von der Form wird ./threshold.exe images/img_1.jpg statt des Formulars ./threshold img_1.jpg - dies notwendig ist, damit wir laufen ./threshold.exe von der Verzeichnis, das tatsächlich enthältthreshold.exe, und immer noch einen gültigen relativen Pfad zu Ihrer Datei.

Verwandte Themen