Forum: PC-Programmierung DOS mehrer Dateien finden und gemeinsam ablegen


von Tex A. (tex)


Lesenswert?

Das Problem.
in einem Unterverzeichnis gibt eine nicht bekannte Anzahl 
Unter-Unterverzeichnissen, die ständig größer oder kleiner werden kann.
In jedem dieser Unter-Unterverzeichnisse kann sich (neben ganz vielen 
anderen Dateien) eine Datei, die Messdaten beinhaltet, befinden. Diese 
heißt in allen Unterverzeichnissen gleich.

Einem Programm, dass diese Daten lesen und verarbeiten kann, müssen nun 
diese Dateien via Kommandozeile zugeführt werden.
Da immer mehrere Dateien vorhanden sein können, können die Dateien nicht 
zusammen in eine Verzeichnis kopiert werden, aus dem sie verarbeitet 
werden, es sei denn, man würde sie umbenennen. Ein alles erschlagender 
Copy- Befehl kann aber bei der Umbenennung die Dateien z.B. nicht 
durchnummerieren, oder doch?! und ich weiß nur nicht wie?
Eine Batch-Datei kann die einzelnen Messgerätedateien nur einzeln dem 
Konverter zuführen.
Der Weg, die Verzeichnisse alle zu Fuß abzuklappern, ist nur von 
geringem wert, da eben immer wieder neue Verzeichnisse dazu entstehen 
können.
Ich weiss dass es mit LINUX einfacher ginge aber es muss nun mal mit DOS 
/ Windoofs laufen, und mit einer Batch-Datei.
Hat jemand eine Idee?

von Peter (Gast)


Lesenswert?

Was versteht du unter Dos? Eine Dos-Box im Windows oder ein richtiges 
Dos?

die Liste der Dateien bekommt man mit dir /s /b "dateiname.xxx" dies 
kann man in eine Datei umleiten und dann diese Datei mit einer for 
schleife abarbeiten (eventuell auch ohne die zwischen Datei). Es gibt 
auch das unix find für Windows da kann man einfach schreiben

find . -name dateiname.xxx --exec programm {} \;

von tex (Gast)


Lesenswert?

ach ja,
Super Idee eigentlich.
Ich versuche es gerade hinzukriegen, scheitere aber an meinen 
rudimentären LINUX-Kenntnissen

Der Konverter liegt auf einem anderen Laufwerk, unter Windows bei
p:\konverter.exe aber find bzw. jetzt natürlich -exec kennt 
p:\konverter.exe natürlich nicht. Wie muss das in diesem Fall richtig 
heißen?

Quelle ist die gefundene Datei, also {}
Ziel ist c:\Dokumente und 
Einstellungen\Benutzer\Desktop\ziel(+datum_und_Sekunde_der_Umsetzung).cs 
v

Wie setzt man das zusammen?
{\/Dokumente und Einstellungen/Benutzer/Desktop/ziel%A DX.csv} wird ja 
wohl ehr nicht funktionieren ...

von Peter (Gast)


Lesenswert?

vermutlich ein leerzeichen Problem da muss man noch mit " arbeiten.


find "c:\Dokumente und Einstellungen\Benutzer\Desktop\" -name "*.csv" 
--exec p:\konverter.exe \"{}\" \;

so in der Art.

von tex (Gast)


Lesenswert?

ähm, nein.
Das "find" klappt super.
Das -exec streikt.
missing argument to "-exec"
ist alles was kommt, egal ob ich
/p/konverter.exe
"p:\koverter.exe"
"/p/konverter.exe"
oder mit ""
oder oder oder eintippe

von Klaus W. (mfgkw)


Lesenswert?

werden die Laufwerke wie P: bei dir unter einem andere Namen 
eingeblendet?
Dann natürlich den nehmen.
Vielleicht zeigt das der Befehl mount (ohne weitere Parameter)?

von Peter (Gast)


Lesenswert?

geht das?

find . -name "*.csv" -exec echo {} \;

von tex (Gast)


Lesenswert?

@Klaus
p: wird im mount als p/ angezeigt, darum die oben probierten Varianten

@Peter
nein, gleicher Fehler
missing argument to '-exec'

von tex (Gast)


Lesenswert?

exec ist auch in  \Bin nicht vorhanden...
vielleicht klemmt es darum

von Peter (Gast)


Lesenswert?

kann es sein das du das Windows find und nicht das Unix-Find für Windows 
nuztzt?

von Klaus W. (mfgkw)


Lesenswert?

tex schrieb:
> exec ist auch in  \Bin nicht vorhanden...
> vielleicht klemmt es darum

-exec ist nicht der Aufruf eines Programmes namens exec, sondern ein
Parameter an find (der die Ausführung des folgenden Kommandos bewirkt,
das wiederum muß vorhanden sein).

Ich würde mal ein Programm testweise aufrufen, das im Standardsuchpfad
gefunden wird (bzw. deinen Konverter dazu bringen, daß er über
PATH erreichbar ist) und dann ohne Pfad aufrufen.

von Micha (Gast)


Lesenswert?

Muss es wirklich eine Batch sein? Falls es nur darum geht das Ganze 
unter Windows laufen zu lassen wäre evtl. VBS auch eine Option.

von tex (Gast)


Lesenswert?

@Peter
find -version
gibt
GNU find version 4.1 zurück
Ist aus dem WINAVR-Paket.
Gibt es bessere?

von tex (Gast)


Lesenswert?

@ Klaus

das wäre z.B.
find . -name "*.csv" -exec echo {} \;
gewesen?

hatten wir schon mit
missing argument to '-exec'
als Ergebnis

von Klaus W. (mfgkw)


Lesenswert?

nebenbei: ich schreibe die "{}" und das ";" unter Linux auch immer
in Gänsefüßchen. Vielleicht brauchst du das hier ja auch so, weiß
ich aber nicht.

von tex (Gast)


Lesenswert?

es geht mit

find . -name "*.csv" -exec"" echo {} \;""

ich probiere mal weiter...
nehme jederzeit gerne Tips an

von Klaus W. (mfgkw)


Lesenswert?

ich traue mich ja kaum, eine bash als Interpreter vorzuschlagen
statt des kranken DOS-cmd...

von tex (Gast)


Lesenswert?

Vorschlagen kannst Du es, aber ich kann wohl nicht damit umgehen.
Wenn Du Dich CVFR aus FL95 zum Approach auf EDDI 25 links anmeldest... 
das würde ich verstehen..

von tex (Gast)


Lesenswert?

es krankt offenbar an der Schreibweise

Find übergibt \Dokumente und Einstellungen/Benutzer/Desktop
und die WIN-Software erwartet \Dokumente und 
Einstellungen\Benutzer\Desktop

von tex (Gast)


Lesenswert?

Vielen Dank an alle die geholfen haben.

Das Problem ist offenbar da zu suchen dass Find das Ergebnis der Suche 
in den {} an Linux-Pomponenten wie z.B. cp weitergibt, jedoch nicht an 
andere Programme. Darum liefert

find . -name "*.csv" -exec"" echo {} \;""
so viele Leerzeilen, wie Einträge gefunden wurden aber keine lesbar 
Ausgabe.

Wenn noch jemand eine praktikable Idee hat...

von Peter (Gast)


Lesenswert?

so geht es bei mir

find -name "*.exe" -exec "c:\windows\system32\attrib.exe" "{}" ;

von tex (Gast)


Lesenswert?

Da kommt bei mir nur der übliche missig argument .. Meldung

Was ist das für ein WinLinux / WinUnix das Du benutzt?

von Peter (Gast)


Lesenswert?

müssten diese hier sein
http://unxutils.sourceforge.net/

von tex (Gast)


Lesenswert?

dann probiere ich es doch mal damit

von tex (Gast)


Lesenswert?

mit meinem Tool funktioniert das noch immer nicht, aber ich kann jetzt 
das Tool über eine Batch-Datei aufrufen und ich denke das bekomme ich 
irgend wie hin.
Vielen Dank für die Hilfe
tex

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.