2.2k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von ericmarch Experte (4.6k Punkte)
Hallo!

Vielleicht beschreibe ich mal das Umfeld in dem mein Problem spielt. Ein einem Ordner befinden sich (systematisch benannt als Datum JJJJ-MM-TT) weitere Ordner die am jeweiligen Tag mit den bis dato jüngsten Fotos aus der DigiCam gefüllt werden. Diese folgen einer laufenden Nummer, sollten aber auch über Metadaten identifizierbar sein.

Ich möchte nun in dem Sammelordner eine Funktion starten die (was das leben gewiss vereinfacht) den (dem Namen nach) jüngsten Ordner auffindet und darin dann die jüngste Datei (mithin die höchste Nummer) mit Namen nennt.

Kenne ich die (wer hätte es gedacht) kann eine Batch (die ich durchaus in das Skript integrieren kann) den Ordner mit dem Namen von heute anlegen und dann aus der Kamera alle neueren Dateien als die letzte dort eingeparkt werden. (Nicht, dass ich das nicht auch gleich das Skript machen ließe.)


Meine Kernproblem ist, dass ich das z.B. recht leicht in VBA coden könnte, sprich: ich weiß wie man programmiert… Aber nirgends finde ich eine simple Anleitung die mir sagt, dies und das ist die Syntax um einen Ordner zu listen, mit jener kopiere ich eine Datei und mit einer weiteren lege ich Ordner an.

Wenn mir also mit Letzterem geholfen werden kann muss sich niemand bemühen dies für mich zu programmieren (damit ich die Struktur umsetzen könnte).

Eric March

6 Antworten

0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
…eigentlich erstaunlich, dass schon mal bescheidene 2 Zeilen (die For-Schleifen oben) reichen um die nominelle Aufgabe zu lösen.

Hätte ich vor dem Versuch nicht erwartet.

Der Rest ist neben dem heutigen Datum das Gezirkel mit führenden Nullen.

@echo off

set Fotos=H:\Bitmaps\Fotos\Casio\
set Kamera=M:\DCIM\102CASIO\CIMG

for /F "usebackq eol=." %%i in (`dir %Fotos% /b /ad /od`) do set LetztesVerzeichnis=%%i
for /F "usebackq" %%i in (`dir %Fotos%%LetztesVerzeichnis%\*.jpg /b /od`) do set LetzteDatei=%%i

Rem CIMGnnnn.JPG
set Zähl=%LetzteDatei:~4,4%

:ZählNull
set FührendeNull=%Zähl:~0,1%
if not %FührendeNull%==0 goto HeuteOrdner
set Zähl=%Zähl:~1%
goto ZählNull

:HeuteOrdner
if %date:~2,1% == . goto TMJ
::JJJJ-MM-TT
set Jahr=%date:~0,4%
set Monat=%date:~5,2%
set Tag=%date:~8,2%
goto HeuteOrdner2
:TMJ
::TT.MM.JJJJ
set Jahr=%date:~6,4%
set Monat=%date:~3,2%
set Tag=%date:~0,2%

:HeuteOrdner2
if not exist %Fotos%%Jahr%-%Monat%-%Tag%\nul md %Fotos%%Jahr%-%Monat%-%Tag%

:WeiterZählen
set /a Zähl=%Zähl%+1
set Nummer=000%Zähl%
set Nummer=%Nummer:~-4%
if not exist %Kamera%%Nummer%.* goto raus
copy %Kamera%%Nummer%.* %Fotos%%Jahr%-%Monat%-%Tag%
goto WeiterZählen

:raus
echo Alles Kopiert.

:Ente
Set Fotos=
Set Kamera=
set LetztesVerzeichnis=
set LetzteDatei=
set Zähl=
Set Nummer=
set Jahr=
set Monat=
set Tag=


Das alles enthält keine Sicherung (wenn schon alles übertragen wurde. Und wie man sieht orientiere ich mit nach Gottvertrauen am Systemdatum und nicht dem Datum-im-Ordnernamen bzw. der laufenden Nummer.

So weit wenigstens tut das unter den Vorgaben, aber mich würde schon reizen ob man da nicht doch direkt (und einigermaßen elegant) den Ordnernamen auswerten kann.

Eric March
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)

Meine Kernproblem ist, dass ich das z.B. recht leicht in VBA coden könnte, ...nirgends finde ich eine simple Anleitung...

Verstehe ich das richtig, Du möchtest am liebsten in VBA coden, also aus einer Anwendung heraus (Visual Basic for Applications)? Oder meinst Du VBS (Visual Basic Script)?

Da im Subject "WSH" steht, verlinke ich mal:
WSH

Für Dich vermutlich interessant:
folder object

Von dort aus kommst Du auch zu File object und was Du sonst noch brauchst.
0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
…nein, ich schrieb nur, dass ich das in VBA leicht würde programmieren können. Nur kommt VBA, da es eine Kommandozeilen/Batch-Lösung sein soll, natürlich nicht in Frage.
Es sollte nur darlegen, dass ich die Logik programmieren kann, mir aber die Sprache (respektive deren Worte) fehlt dies zu kodieren.

Auch vom FolderObject kann ich mir effektiv nichts kaufen, wie so oft in meinem Leben: nach Dingen die ich nicht kenne oder explizit benennen kann, nach denen kann ich nicht fragen. Nie, nirgendwo, in keinem Zusammenhang.

Mir würde nur eine systematische Aufstellung der Befehle (samt aller Parameter & Strukturen - siehe diesen Bandwurm «Cells(10,10).Comment.Shape.TextFrame.Characters.Font.Color = RGB(0, 0, 64)») nach programmtechnischen Elementen helfen: Eingabe, Ausgabe, Schleifen, Dateizugriff, Dateisystemzugriff, Dateiaufruf… Und eben die komplette (!) Befehls-Struktur wie das alles mit Unterbefehlen aufzuzäumen ist.

Ohne Muster kommt kein Mensch auf den o.g. Bandwurm… Ohne zu erfahren was systematisch das FolderObject alles kann kommt man nicht weiter. Was hilft es im Bandwurmbeispiel die ›Characters‹ zu kennen (in der Hilfe zu finden) wenn man nicht weiß wie man sie mit einem Zellkommentar verheiratet und wie man die Zeichen en detail steuert.

Ein Buch (?) das einem klipp und Klar sagt: »Das ist eine Zelle. Eine Zelle hat diesen und diesen  ersten Zusatzparameter {Unterbefehl… Attribut? Eigenschaft?}: XY • Das ist Zusatzparameter XY, der kann dieses usf.« - so was suche ich. Die vorgeschlagene Aufstellung von Begriffen ohne sie nach ihrem Zweck durchforsten zu müssen ist nicht zielführend wenn sie nicht kategorisiert sind.

Eric March
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
...Und eben die komplette (!) Befehls-Struktur...

Die WSH dokumentation ist meiner meinung nach vollständig. Beispiele gibts auch.
Ich hatte nur die "Referenz" verlinkt. Es gibt noch allgemeinere Informationen, mit den Basics:
Windows Script Host

Zu den Scriptsprachen:
vbscript
JScript (was ich wirklich vorziehen würde)

Vielleicht hilft auch zum Einstieg:
Windows scripting - alles ist möglich
0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
Nichts für ungut, aber diese MS-Seiten kannst du vergessen.
Da mag alles stehen, vielleicht, aber es ist so wie dort angeboten praktisch eine wertlose Datenwüste.
Ich habe versucht die Links zu verfolgen - man springt von nichterklärenden Beschreibungen von Methoden, Objekten, Eigenschaften um diese zu ergründen zu den nächsten nichterklärenden Beschreibungen von Methoden, Objekten, Eigenschaften um eine Erklärung zu finden zu den nächsten…
Nirgends Strukturen wie man eine Schleife kodieren muss; kopfgesteuert, fußgesteuert, zählend - dafür erfahre ich dass es eine «hasOwnProperty Method» gibt die «Returns a Boolean value that indicates whether an object has a property with the specified name.» ohne eine Wort zu verlieren wo das object herkommt und wie man was für einen Namen spezifizieren muss oder könnte; und warum ich so was überhaupt würde ermitteln wollen wenn ich selbst das so vor-programmiere entzieht sich mir vollends.
Das ist so keine Hilfe (seitens MS), keine Anleitung (seitens MS) sondern eine Weihrauchnebelwand durch die man sich nicht durchfindet.

JScript und VBS nützen mir genau nichts wenn ich ein Shell-Programm (Batch, CMD; WHS) über einen Link auslösen will. Ich habe keine Not mir dafür einen Compiler anzulachen der mir eine COM oder EXE liefert.


Und um das noch mal deutlich zu machen: mein Notbehelf mit CMD-Batch erfüllt meine Aufgabenstellung nicht Ordner nach Namen zu behandeln, dito die darin gefundenen Dateien.
Insofern würde mir wirklich helfen Codeschnipsel zu bekommen für Schleifenstrukturen, um Ordner- und Dateinamen zu lesen um Maxima zu ermitteln und auszuwerfen.
Mir fehlt die Syntax die Programmstruktur (PAPL) in Code zu verwandeln!

Eric March
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
JScript und VBS nützen mir genau nichts ... Insofern würde mir wirklich helfen Codeschnipsel zu bekommen
Also, welche Programmiersprache/Scriptsprache möchtest Du verwenden?

WSH verwende ich immer mit JS. VBS geht auch, bei anderen Sprachen bin ich mir nicht sicher.
JS und VBS sind normalerweise immer mit Windows installiert (wscript.exe, bzw cscript.exe)

Nirgends Strukturen wie man eine Schleife kodieren muss

Das kommt auf die Programmiersprache an. Unter den jeweiligen Links die ich geschickt habe steht alles dazu für vbs und js (siehe "statements"). Ich hab aber verstanden, dass Du vbs und js nicht willst. Für andere Programmiersprachen müsstest Du erst sagen, welche Du verwenden willst.

ohne eine Wort zu verlieren wo das object herkommt

Steht dort auch. Siehe hasOwnProperty Method (JavaScript):
"Applies To: Object Object (JavaScript)"

Ich gebe zu, dass die Seiten von MS nicht sehr übersichtlich sind, aber es steht alles dort.
Ich behelfe mir oft, indem ich eine Suchmaschine verwende und "msdn-microsoft-com" in die Suche einschliesse, anstatt bei MS selbst zu suchen, damit habe ich meistens mehr erfolg.
...