Ein paar Anmerkungen zunächst: wenn Sie Data/data1.txt
als Argument verwenden, sollte es wirklich /Data/data1.txt
(mit einem führenden Schrägstrich) sein? Soll die äußere Schleife nur nach .txt-Dateien suchen oder nach allen Dateien in /Data? Hier ist eine Antwort, unter der Annahme von /Data/data1.txt
und nur .txt-Dateien:
#!/bin/bash
for filename in /Data/*.txt; do
for ((i=0; i<=3; i++)); do
./MyProgram.exe "$filename" "Logs/$(basename "$filename" .txt)_Log$i.txt"
done
done
Notizen:
/Data/*.txt
erweitert sich zu den Pfaden der Textdateien in /Data (einschließlich des /Data/Teils)
$( ... )
führt einen Shell-Befehl aus und fügt dessen Ausgabe an dieser Stelle in die Befehlszeile ein
basename somepath .txt
gibt den Basisanteil von somepath aus, wobei .txt am Ende entfernt wird (z.B. /Data/file.txt
-> file
)
Wenn Sie MyProgram mit Data/file.txt
anstelle von /Data/file.txt
ausführen müssen, verwenden Sie "${filename#/}"
, um den führenden Schrägstrich zu entfernen. Andererseits, wenn es wirklich Data
und nicht /Data
ist, das Sie durchsuchen wollen, verwenden Sie einfach for filename in Data/*.txt
.