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

Dateinamen auslesen und in Textdatei ausgeben

Frage Entwicklung Batch & Shell

Mitglied: Philosoph

Philosoph (Level 1) - Jetzt verbinden

13.07.2010 um 12:14 Uhr, 5100 Aufrufe, 15 Kommentare

Hallo liebes Forum,

der Tommy ist wieder da und hat eine Frage. Ich bin ja mal gespannt, ob jemand tatsächlich schneller ist als Bastler, der Shell-Gott im Forum.
Ich möchte eine Ordnerstruktur auslesen und jeden gefunden Dateinamen aus der Ordnerstruktur A mit allen Dateinamen der Ordnerstruktur B kombinieren. Das Ergebnis soll in einer TXT ausgegeben werden.
Jetzt die Details: Meine Ordnerstruktur sieht so aus

-Ordnerstruktur A:
|-Ordner3 (Inhalt: M1.jpeg)
|-Ordner6
|-Ordner4
|-Ordner2
|-Ordner5
|-Ordner8


-Ordnerstruktur B:
|-Ordner3 (Inhalt: G2.jpeg, G3.jpg, G6.tiff, G8tif)
|-Ordner6
|-Ordner4
|-Ordner2
|-Ordner5
|-Ordner7

Am Beispiel was das Skript genau macht:
Skript holt sich die Dateienamen aus der Verzeichnisstruktur A und kombiniert die gefundenen Dateinamen jeweils mit den Dateinamen aus Ordnerstruktur B.
Das Ergebnis sollte dann so aussehen:

M1-G2
M1-G3
M1-G6
M1-G8

User Bastla hat mir so etwas ähnliches mal gemacht, aber ich schaffe es leider nicht alleine das Skript für diesen Zweck umzubiegen.
Hat jemand eine Idee oder Ansätze für mich? Ist das überhaupt über die Shell zu lösen?
Eigentlich muss "nur" die Dateiliste von "Ordner 3" mit der gesamten Dateiliste von Verzeichnisstruktur B kombiniert werden.
Danach der Inhalt von Ordner6 mit der gesamten "Ordnerstruktur B"...
So, jetzt bin ich gespannt was das alte gute DOS so drauf hat - bzw. der Nachfolger.

LG
Tommy
Mitglied: LotPings
13.07.2010 um 13:18 Uhr
Hallo tommy,

bastla war vor 4 Tagen das letzte Mal aktiv,
fraglich ob er das so schnell mitbekommt.

Aber so ganz klar ist das noch nicht,
  • Ist deine Ordnerstruktur B immer spiegelbildlich zu A?
  • gibt es jeweils nur eine Ordner Ebene oder mehrere?
  • gilt das für alle Dateien oder sind nur betsimmte Extensions zu berücksichtigen?

Gruß
LotPings
Bitte warten ..
Mitglied: Philosoph
13.07.2010 um 13:33 Uhr
Hallo LotPings.

Na dann hoffe ich, dass bastla bald wieder online ist. Er war war und ist eine Bereicherung für das Forum!
Und ich denke, mit seinen Erfahrungen kann er hier so einigen weiterhelfen!

Nun zu deinen Fragen:

  • Ist deine Ordnerstruktur B immer spiegelbildlich zu A?
Nein. Die Verzeichnisstruktur ist eine andere. Die beiden Strukturen haben natürlich auch verschiedene Inhalte:
einmal Gerätetemplates (G1.jpeg, G2.JPG, G3.tiff ...) und die zweite Struktur Motive-Templates (M1.jpeg, M2.TIF ...).
Nun soll das Skript sich von jeder Datei aus Verzeichnisstruktur A den Dateinamen M1 schnappen und mit G1, G2, G3... kombieren:
M1-G1
M1-G2
M1-G3
...
...

Wenn das mit dem M1 Dateinamen abgeschlossen ist, soll das Skript mit der nächsten M Datei das selbe fortführen:
M1-G1
M1-G2
M1-G3
M2-G1
M2-G2
M2-G3

  • gibt es jeweils nur eine Ordner Ebene oder mehrere?
Die Ordnerstruktur kann sich tatsächlich in die Tiefe verschachteln.

  • gilt das für alle Dateien oder sind nur betsimmte Extensions zu berücksichtigen?
Es befinden sich tatsächlich verschiedene Formate im Ordner. Es sollen aber nur JPEG, JPG, TIF, TIFF Dateien indexiert und miteinander kombiniert werden.

Danke für deine konkreten Fragen!
LG
Tommy
Bitte warten ..
Mitglied: Philosoph
13.07.2010 um 15:43 Uhr
Noch eine Anregung meinerseits:

Das Skript kann auch so arbeiten, dass je Verzeichnisstruktur eine Text-Datei mit dem Verzeichnisbaum-Inhalt angelegt wird.
So können später beide Textdateien (bzw. Dateinamen) je Zeile miteinander kombiniert werden werden.
Das kann dann so aussehen:

Textdatei1:
M1
M2
M3
M4

Textdatei2:
G1
G2
G3
G4

Ergebnis.txt:
M1-G1
M1-G2
M1-G3
M1-G3
Bitte warten ..
Mitglied: LotPings
13.07.2010 um 17:00 Uhr
Nö,
die direkte Version ist eigentlich einfacher.
Dieser erste Batch war auch vorhin schon fast fertig, aber dann kam halt was (für mich) wichtigeres dazwischen....

Only braintested (kann man sich nicht immer drauf verlassen )
01.
@Echo off 
02.
Setlocal EnableDelayedExpansion 
03.
Set BasisA=D:\Test\projekt\geraete\ 
04.
Set BasisB=D:\Test\projekt\motive\ 
05.
Pushd "%BasisA%" 
06.
For /f "delims=" %%A in ('Dir /B /AD') Do Call :CheckFold "%%~fA" 
07.
Echo Habe fertig. 
08.
Pause 
09.
Popd 
10.
Goto :Eof 
11.
:CheckFold 
12.
Set "GeraeteTemplates=%~1" 
13.
Set "MotiveTemplate=!GeraeteTemplates:%BasisA%=%BasisB%!" 
14.
If Not Exist "%MotiveTemplate%" Goto :Eof 
15.
Pushd "%MotiveTemplate% 
16.
For /F "delims=" %%B in ('Dir /B "%GeraeteTemplates%\*.jpeg"' 
17.
 ) Do For /F "Delims=" %%C in ('Dir /B *.JPEG *.JPG *.TIF *.TIFF' ) Do Echo.%%~nB-%%~nC 
18.
PopD
Gruß
LotPings

Version überarbeitet und getestet, sollte jetzt funktionieren
Bitte warten ..
Mitglied: Philosoph
13.07.2010 um 17:06 Uhr
Ahoi!

Was muss ich noch machen, damit mir das Ergebnis ausgegeben wird?
Ich kann zwar deinem Code teilweise folgen, sehe aber hier keine Anweisung für die Ausgabe in einer TXT Datei.

Oder habe ich da etwas übersehen im Code?



LG
Tommy
Bitte warten ..
Mitglied: LotPings
13.07.2010 um 17:16 Uhr
Hallo Tommy,

dazu müsstest du in Zeile 19 noch eine Ausgabeumleitung in eine Datei einbauen,
aber hey wir testen das doch gerade erst - hast du denn eine korrekte Ausgabe auf dem Bildschirm?

Gruß
LotPings
Bitte warten ..
Mitglied: Philosoph
13.07.2010 um 17:28 Uhr
Hi LotPings!!

Also die Ausgabe auf dem Monitor (cmd) sieht wie folgt aus (@Echo off deaktiviert)

C:\test\Projekt>Setlocal EnableDelayedExpansion
C:\test\Projekt>Set BasisA=c:\test\projekt\geraete\
C:\test\Projekt>Set BasisB=c:\test\projekt\motive\
C:\test\Projekt>Pushd "c:\test\projekt\geraete\"
C:\test\Projekt\geraete>For /F "delims=" %A in ('Dir /B /AD') Do Call :CheckFold
"%~fA"

C:\test\Projekt\geraete>Echo Habe fertig.
Habe fertig.

C:\test\Projekt\geraete>Pause
Drücken Sie eine beliebige Taste . . .
Alle Pfade und Befehle scheinen zu greifen. Fehlt mir also tatsächlich nur noch die Ausgabe der Kombinationen der Dateinamen in einer Textdatei.
Hilft dir das weiter?
Übrigens, du hast die Variable GeraeteTemplates einmal mit ae und einmal mit ä geschrieben. Wurde bereits verbessert.
Bitte warten ..
Mitglied: LotPings
13.07.2010 um 18:14 Uhr
Habe die Batch jetzt bei mir getestet (in LW D:\ ) und etwas überarbeitet - hier klappt es soweit.
Änderungen siehe oben.

Gruß
LotPings
Bitte warten ..
Mitglied: Philosoph
13.07.2010 um 21:36 Uhr
Ahoi!

So, nun bin ich auch mal daheim. Aber kann es dann doch nicht lassen weiter zu probieren.
Denn auch nachdem du dein Skript geändert hast, wird bei mir keine neue Textdatei mit den Kombinationen angelegt.

Ich sehe auch im Skript keine Anweisung, die das Ergebnis in eine Text-Datei umleitet.
die Pfade habe ich so übernommen. Mache ich da was falsch?


LG
Tommy
Bitte warten ..
Mitglied: LotPings
13.07.2010 um 21:45 Uhr
Zitat von Philosoph:
So, nun bin ich auch mal daheim. Aber kann es dann doch nicht lassen weiter zu probieren.
Denn auch nachdem du dein Skript geändert hast, wird bei mir keine neue Textdatei mit den Kombinationen angelegt.

Philosohen sind doch eigentlich Denker, da passt was nicht.
Solange du nicht gehen kannst - versuchen wir wir gar nicht erst zu laufen.

Ich sehe auch im Skript keine Anweisung, die das Ergebnis in eine Text-Datei umleitet.
die Pfade habe ich so übernommen. Mache ich da was falsch?

HAST DU DENN INZWISCHEN EINE PASSENE BILDSCHIRMAUSGABE ?????????

Ich bin eigentlich diese Woche sehr zurückhaltend,aber du schaffts es bald das zu ändern

Gruß
LotPings
Bitte warten ..
Mitglied: Philosoph
13.07.2010 um 21:53 Uhr
Hmmmm,

dann musst du mir erklären was für dich "eine passende Bildschirmausgabe ist". Ich bin davon ausgegangen, dass du damit die Rückmeldung der cmd.exe haben willst. Also was erscheint, wenn ich das Skript ausführe. Aber das habe ich dir ja oben bereits gepostet.

Das ist meine aktuelle Bildschirmausgabe, was ich dir aber bereits oben gepostet habe.
Habe fertig.
Drücken Sie eine beliebige Taste . . .

Falls du jedoch meine Wunsch-Formatierung der Text-Datei meinst:
Motivdateinameohneendung-Gerätedateiname(ohneendung)
Beispiel:
M454564-Gerät454654
M454564-Gerät448
M454564-Gerät6684

Aber wenn ich auch damit falsch liege:
Was verstehst du nun unter einer Bildschirmausgabe? Ich bin mir sicher, dass ich dir dann dienen kann.
Und immer locker bleiben, ich kenne selbst das Problem mit den blöden Fragen (dann aber aus dem Photoshop und Illustrator Bereich). Und ich habe früher selbst programmiert, in Profan und C. Aber ich werde mich bessern - versprochen.

Grüße aus Bad Kreuznach
Tommy
Bitte warten ..
Mitglied: LotPings
13.07.2010 um 22:12 Uhr
Ich habe mir nach deinen obigen Angaben eine Testumgebung zusammengestellt:

01.
18:03:27 +D:\Test\Projekt____________________ 
02.
>dir /B/S/A 
03.
D:\Test\Projekt\geraete 
04.
D:\Test\Projekt\motive 
05.
D:\Test\Projekt\Philosoph.cmd 
06.
D:\Test\Projekt\geraete\Ordner3 
07.
D:\Test\Projekt\geraete\Ordner3\M1.jpeg 
08.
D:\Test\Projekt\motive\Ordner3 
09.
D:\Test\Projekt\motive\Ordner3\G2.jpeg 
10.
D:\Test\Projekt\motive\Ordner3\G3.jpg 
11.
D:\Test\Projekt\motive\Ordner3\G6.tif 
12.
D:\Test\Projekt\motive\Ordner3\G8.tif
Mit der aktuellen obigen Batchversion erhalte ich diese Ausgabe:
01.
18:10:25 +D:\Test\Projekt____________________ 
02.
>Philosoph.cmd 
03.
M1-G2 
04.
M1-G3 
05.
M1-G6 
06.
M1-G8 
07.
Habe fertig. 
08.
Drücken Sie eine beliebige Taste . . .
Und wenn ICH dich richtig verstanden habe, entspricht das deinen Wünschen.

Um diese Ausgabe in eine Datei umzuleiten muss jetzt nur noch
Echo.%%~nB-%%~nC
gegen
>>"X:\Pfad\Datei.ext" Echo.%%~nB-%%~nC
getauscht werden.

Gruß
LotPings
Bitte warten ..
Mitglied: Philosoph
13.07.2010 um 22:39 Uhr
Super, ich danke dir sehr!
Damit hast du mir viele schlaflose Nächte genommen. Ich habe das Skript bzw den Befehl "dir" mit dem Parameter /s erweiter: For /F "delims=" %%B in ('Dir /B /S "%GeraeteTemplates%\*.jpg"'
Nun werden auch Verzeichnisse inklusive Unterordner abgearbeitet. Dadurch entsteht folgendes Problem:

Beispiel:
Im Motive-Ordner "123" liegt die Datei M1.jpeg.
In einem anderen Motive-Ordner (z.B. ein Unterordner) liegt die selbe Datei: M1.jpeg.
Und genau diese Datei (Zeichenfolge) soll das Skript überspringen da sie bereits einmal abgearbeitet/kombiniert wurde.


Bietet diese Skriptsprache eine Funktion die ich dafür anwenden kann?
In einem anderen Forum wurde bereits danach gefragt, leider ohne Erfolg und Ergebnis.


Bis morgen in alter Frische
Tommy
Bitte warten ..
Mitglied: LotPings
13.07.2010 um 23:22 Uhr
Wenn ich dich da jetzt richtig verstehe sind mir da M G durcheinander geraten?

Grundsätzlich kannst du alle bereits ausgegebenen Motive in einer tempDatei festhalten und bei jedem erneuten Versuch checken ob bereits in der Temp enthalten.
Das verlangt einige Umstzellungen und verlangsamt das ganze auch, aber machbar.

Falls ich wieder Zeit und Lust habe .... jetzt wirds mir zu spät und zuviel.

Gruß
LotPings
Bitte warten ..
Mitglied: Philosoph
14.07.2010 um 08:48 Uhr
Hallo LotPings,

das Problem bzw. die Fragestellung hier ist gelöst. Ich bin gerade dabei das Skript genau zu testen und anzupassen.
Das Problem mit mehrfach vorhandenen Einträgen fange ich am Ende so ab:
Die doppelten Einträge werden mit einem kleinen Tool gesucht und entfernt.

01.
C:\Programme\GnuWin32\bin\sort.exe -u D:\test\vorlaeufige_artikelliste.txt > D:\test\endgueltige_artikelliste.txt
Ein Problem sehe ich noch, aber dazu melde ich mich gleich nochmal.


LG
Tommy
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst VBS Script in eine Textdatei ausgeben (VBS mit Batch zusammenführen) (5)

Frage von Luuke257 zum Thema Batch & Shell ...

Windows Server
gelöst Powershell array zeilenweise in Textdatei ausgeben (6)

Frage von Peter0816 zum Thema Windows Server ...

Batch & Shell
gelöst Mit Batchdatei Informationen auslesen und diese strukturiert in Excel ausgeben (9)

Frage von Flodsche zum Thema Batch & Shell ...

Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (12)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...