Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Verwendung aller Dateien in einem Ordner zur Weiterverarbeitung - Relative Pfadangabe mit FOR?

Frage Entwicklung Batch & Shell

Mitglied: bastis06

bastis06 (Level 1) - Jetzt verbinden

22.07.2010 um 12:05 Uhr, 3045 Aufrufe, 11 Kommentare

Guten Tag,

an unserem Lehrstuhl verwenden wir ein neues Programm, mit dem es möglich ist, Kennzahlen aus wav-Dateien auszulesen. Das Programm liest aus einer wav-Datei Informationen aus und speichert diese dann z. B. in einer CSV-Datei. Sollten in der CSV-Datei schon Daten vorhanden sein, wird in dieser eine weitere Zeile angehängt. Leider ist es sehr mühsam, den Programmaufruf immer erneut anzupassen, deshalb suchen wir nach einer Möglichkeit, alle Dateien aus einem Ordner mit dem Programm aufzurufen.

Über jeden Hinweis bin ich sehr dankbar!

Beste Grüße,
bastis06

Der einzelne Aufruf über die Kommandozeile erfolgt in der Regel so:

programmname -C [[rel. Pfad]Konfigurationsdatei] -I [[rel. Pfad]Eingabedatei] -O [[rel. Pfad]Ausgabedatei]

Beispiel:
SMILExtract -C config/paraling_IS10.conf -I wav_files/speech01.wav -O speechoutput.csv


Umgebung:
- Die Eingabedateien liegen in dem Ordner wav_files.
- Das Programm akzeptiert nur relative Pfadangaben.
- Erlaubt sind / und \ als Pfadtrenner.


Ich habe es schon so versucht:

@echo off
for /R wav %%I IN (*.wav) do (
SMILExtract -C config/paraling_IS10.conf -I %%I -O speechoutput.csv
)

Nur leider akzeptiert das Prgramm die absolute Pfadangabe nicht.
Mitglied: digital-nervous-system
22.07.2010 um 12:36 Uhr
Hi,
hast Du die Möglichkeit die Powershell zu verwenden? Wenn ja, würde ich das etwa so machen

$smileextract = "path to exe"
$wav_folder = ".\"
foreach ($i in (ls $wav_folder -filter *.wav))
{
& "$smileextract -C config/paraling_IS10.conf -I $i -O speechoutput.csv"
}

Das script dann in das wav_folder Verzeichnis legen und ab dafür ;)

Gruß
Jürgen
Bitte warten ..
Mitglied: digital-nervous-system
22.07.2010 um 12:41 Uhr
Das Problem was ich hier übrigens noch sehe, ist, dass wenn du das so mit ner Schleife machen willst an das speechoutput.csv noch irgendwas dranhängen musst (zb. "wav-datei_speechoutput.csv" oder so), sonst überschreibt er ja immer wieder die gleiche Datei mit nem neuen wav-output oder?
Bitte warten ..
Mitglied: bastis06
22.07.2010 um 13:53 Uhr
Hallo Jürgen,

vielen Dank für Deinen Post. Das verwendete Betriebssystem ist Win7, die Powershell wäre also vorhanden. Bisher habe ich noch nie mit der Powershell gearbeitet, mein Vorwissen ist also gleich null. Trotzdem habe ich das Skript angepasst (komplette Pfadangabe zur exe) und versucht mit > powershell juergenskript.ps auszuführen.

Dann habe ich gemerkt, dass zur Ausführung von Skripten die Sicherheitseinstellungen geändert werden müssen. Das wäre zwar an meinem Rechner möglich, nicht aber an allen Mitarbeiterrechnern.

Kennst Du noch eine einfache Batch-Alternative?
Bitte warten ..
Mitglied: digital-nervous-system
22.07.2010 um 13:59 Uhr
Hi,

naja mit Batch kenn ich mich zwar schon recht gut aus - aber Schleifen und For-Statements in Batch find ich grauenvoll ^^

aber was du meinst ist einfach, du musst die Execution policy setzen, die steht wahrscheinlich im Moment auf "Restricted"

öffne einfach die powershell als admin und gib ein "Set-ExecutionPolicy Remotesigned"

danach sollte das script laufen

Gruß Jürgen
Bitte warten ..
Mitglied: bastis06
22.07.2010 um 15:19 Uhr
Hey ho,

jetzt läuft zumindest das Skript. Es gibt aber folgende Fehler zurück:

==> Fehler A

PS C:\opensmile\wav_samples> .\aufruf_alle.ps1
Die Benennung "c:\opensmile\SMILEextract.exe -C config/paraling_IS10.conf -I mu
sic01.wav -O speechoutput.csv" wurde nicht als Name eines Cmdlet, einer Funktio
n, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie
die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), u
nd wiederholen Sie den Vorgang.
Bei C:\opensmile\wav_samples\aufruf_alle.ps1:5 Zeichen:2

& <<<< "$smileextract -C config/paraling_IS10.conf -I $i -O speechoutput.csv

"
+ CategoryInfo : ObjectNotFound: (c:\opensmile\SM...peechoutput.c
sv:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

==> Fehler B

Es fehlt die Pfadangabe zur Input-wav-Datei (siehe Beispiel am Anfang).

Dir ein dickes Danke für die Unterstützung!

Grüße,
Sebastian
Bitte warten ..
Mitglied: digital-nervous-system
22.07.2010 um 15:25 Uhr
Hey Sebastian,

ok, zweiter Versuch

01.
$smileextract = "c:\opensmile\SMILEextract.exe" 
02.
$wav_folder = ".\" 
03.
foreach ($i in (ls $wav_folder -filter *.wav)) 
04.
05.
	&$smileextract -C config/paraling_IS10.conf -I $i -O $i_speechoutput.csv 
06.
}
diesmal sollte auch für jedes wav file eine eigene csv erzeugt werden. Wo liegt denn diese config datei? ..\wav_folder\config\paraling_IS10.conf ?

Gruß
Jürgen
Bitte warten ..
Mitglied: Biber
22.07.2010 um 15:31 Uhr
Moin bastis06,

willkommen im Forum.
Um nochmals kurz auf die Nur-Batch-mit-FOR-Variante zurückzukommen...

Wenn ich deine Aufgabenstellung richtig interpretiere, dann erwartet dein Programm SMILExtract ja die relativen Pfadangaben deshalb, weil auch das Unterverzeichnis "config" (und nicht nur das Unterverzeichnis "wav_files") unterhalb des gerade zufälligen Verzeichnisses liegen muss.

Von daher würde ich erst noch einmal verifizieren, ob es denn auch mit "absoluten" Verzeichnisangeaben nicht klappt,
wenn sowohl "config" wie "wav_files"-Verzeichnis absolut angegeben werden.

Falls nun wider Erwarten wirklich eine Absulte Pfadangabe nicht möglich ist... okay, nehmen wir auch hin. Dann also

  • VOR und NACH der FOR-Anweisung noch mit "PushD 'verzOberhalbWavFiles' bzw 'PopD' das richtige Verzeichnis zum Aktuellen machen
  • und dann eine FOR-Anweisung ohne "/R" über das Unterverzeichnis "wav_files" ausführen

Im Ausführungsteil kannst du ja "fest verdrahtet" als Dateiangabe stehen haben "wav_files\%%~nxi" statt "%%i".

Nochmal zu den Variableninhalten der Laufvariablen "%%i" in den FOR-Varianten
  
>for  %i in (d:\temp\wav_files\*.wav) do @echo %i 
d:\temp\wav_files\demo1.wav 
d:\temp\wav_files\demo2.wav 
d:\temp\wav_files\demo3.wav 
## Hier ein reines FOR %%i auf einen absoluten Pfad mit Datei-Wildcars. %%i ist ->voller Pfad+Dateiangabe 
 
(=15:26:07  D:\temp\wav_files=) 
>for  %i in (*.wav) do @echo %i 
demo1.wav 
demo2.wav 
demo3.wav 
## Hier ein reines FOR %%i OHNE Pfadangabe mit Datei-Wildcars. %%i ist ->nur Dateiangabe 
 
(=15:26:13  D:\temp\wav_files=) 
>for /r %i in (*.wav) do @echo %i 
D:\temp\wav_files\demo1.wav 
D:\temp\wav_files\demo2.wav 
D:\temp\wav_files\demo3.wav 
 
## Hier ein rekursives FOR /R %%i OHNE Pfadangabe mit Datei-Wildcars. %%i ist ->voller Pfad Dateiangabe
Mit dem Zurechtstutzen auf "%%~nxi" reduzierst du es wieder auf "nur Name+Extension" (ohne Pfad)

Summa summarum:
01.
@echo off 
02.
PushD "D:\einOberverzeichnisVonWav_Files" 
03.
for  %%I IN (wav_files\*.wav) do ( 
04.
SMILExtract -C config/paraling_IS10.conf -I wav_files\%%~nxI -O speechoutput.csv 
05.
06.
PopD
Grüße
Biber
Bitte warten ..
Mitglied: bastis06
22.07.2010 um 15:36 Uhr
Hm, jetzt sieht der Fehler so aus. Die Outputdatei kann ruhig immer dieselbe sein. Das Programm SMILEextract prüft, ob die Outputdatei bereits vorhanden ist. Falls sie vorhanden ist, wird am Ende eine weitere Zeile eingefügt.

""Die Benennung "c:\opensmile\SMILEextract.exe" wurde nicht als Name eines Cmdlet
, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt.
Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofer
n enthalten), und wiederholen Sie den Vorgang.
Bei C:\opensmile\wav_samples\aufruf_alle.ps1:7 Zeichen:2

& <<<< $smileextract -C config/paraling_IS10.conf -I $i -O speechoutput.csv

+ CategoryInfo : ObjectNotFound: (c:\opensmile\SMILEextract.exe:S
tring) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException""
Bitte warten ..
Mitglied: digital-nervous-system
22.07.2010 um 15:38 Uhr
ich sag ja, grauenvoll.. *lach*
Bitte warten ..
Mitglied: bastis06
23.07.2010 um 09:53 Uhr
Hallo Biber,

herzlichen Dank für Deine Ausführung. Es funktioniert nun ohne Probleme. Aus irgendeinem Grund wurde die Variable im FOR Befehl bei Verwendung der Option /R nicht gekürzt. Ohne /R geht jetzt alles (Unterverzeichnisse wären zwar schön gewesen, sind aber nicht notwendig.

Dir und digital-nervous-system ein gutes WE,
bastis06
Bitte warten ..
Mitglied: Biber
23.07.2010 um 10:35 Uhr
Moin bastis06,

bitte prüfe aber noch mal dieses hier
Von daher würde ich erst noch einmal verifizieren, ob es denn auch mit "absoluten" Verzeichnisangeaben nicht klappt,
wenn sowohl "config" wie "wav_files"-Verzeichnis absolut angegeben werden.

--> denn dann hätten wir etwas mehr Spielraum.

Andernfalls... natürlich lässt sich die Unterverzeichnisdurchrödelei (schriftdeutsch: "rekursive Abarbeitung") auch einbauen.

Ich hatte darauf verzichtet, weil ich die Diskrepanz zwischen dem von dir verwendeten FOR/R-Schalter und der Aussage "die Inputdateien liegen immer im Unterordner 'wav_files'" nicht auflösen konnte.
Ich hatte mich dann dafür entscheiden, mal anzunehmen, dass Aussage b) wahr ist.

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Windows Server
gelöst Freigegebener Ordner "Eigene Dateien" (8)

Frage von JensDND zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...