Hallo zusammen,
ist es möglich, unter Windows 7 in der Kommandozeile Dateien mit
Wildcards der Art zu finden, daß mehrere Fragmente zur Auswahl stehen.
Also etwas, was mit regulären Ausdrücken so aussähe:
Das kommt dem, was Du willst, schon recht nahe, nur daß es zwei Listen
nacheinander ausgibt und jede mit der Überschrift "Verzeichnis von ..."
versehen wird.
Wenn Du nur die Dateinamen und sonst nichts aufgelistet bekommen willst,
schreib's so:
1
dir *.jpg *.png /b
Sortieren geht dann mit /on (Dateiname) oder /od (Datum), bzw /o-n und
/o-d in umgekehrter Reihenfolge.
Hallo Dietrich, danke für die schnelle Antwort.
Teo D. schrieb:> Dir *.jpg *.png
OK, "dir" war vielleicht ein ungünstiges Beispiel. Vielleicht hätte ich
besser "icalcls" nehmen sollen, das nur einen "Dateinamen" als Eingabe
erwartet - um diesen Befehl geht es mir nämlich.
Also vom Prinzip her:
Die Auswertung von Wildcards erfolgt unter Windows vom jeweiligen
Programm selbst - das ist anders als in den üblichen *nix-Shells und
Grund für Flamewars und eingeschlagene Köpfe.
Wenn icacls nur ein Argument verkraftet, musst Du es pro Argument erneut
aufrufen.
Hallo Rufus,
danke für die Antwort. Sie ermöglicht mir, die Frage besser zu
formulieren:
"Ist es mit Windows-Wildcards möglich, Dateien mit unterschiedlichen
Endungen zu einem einzigen Argument zu machen?"
Ich hatte damit gerechnet, daß es für den Eingeweihten kein Problem
darstellt (nur irgendwie eine merkwürdige Klammersetzung erfordert).
Hintergrund der Geschichte ist der folgende Thread:
Beitrag "Windows 7: Dateirechte für Dateitypen"
Ich will vielen (vielen!) Dateien mit insgesamt drei unterschiedlichen
Dateiendungen regelmäßig besondere Rechte zuweisen. Dateien mit anderen
Endungen sollen in Ruhe gelassen werden. Damit wird der Aufruf von
"icacls" zu einer ziemlich langen Zeile in einem Script. Wenn ich diese
lange Zeile im Script für jede Dateiendung kopieren muß,
a) braucht das Skript länger (getestet: 100 Dateien mit den Endungen
".1pg" und ".2pg" entweder mit dem Aufruf "icalcs *.?pg [...]" oder mit
zwei getrennten Aufrufen - es scheint genau doppelt so lange zu dauern.
Wahrscheinlich durchsucht er die Verzeichnisstruktur jedesmal neu.) und
b) rechne ich damit, daß bei den ersten Änderungen diese drei Zeilen im
Laufe der Zeit inkonsistent werden - man kennt das ja.
Deswegen hätte ich gerne einen Einzeiler. Aber wenn es nicht geht, geht
es nicht.
EDIT: Heute zu viele Texte mit schlechter Rechtschreibung gelesen. Das
färbt ab. :-(
Walter T. schrieb:> "Ist es mit Windows-Wildcards möglich, Dateien mit unterschiedlichen> Endungen zu einem einzigen Argument zu machen?"
Nur, wenn es das die Wildcards auswertende Programm ermöglicht.
Nochmal:
Das entscheidet das Programm, das Du mit Wildcards verwendest.
> Ich will vielen (vielen!) Dateien mit insgesamt drei unterschiedlichen> Dateiendungen regelmäßig besondere Rechte zuweisen.
Mir erscheint der Ansatz ... fragwürdig. Zwar scheint Dein Lösungsansatz
nicht völlig unmöglich zu sein, aber damit behebst Du nur Symptome eines
anderswo gelagerten Problemes.
Walter T. schrieb:> Deswegen hätte ich gerne einen Einzeiler. Aber wenn es nicht geht, geht> es nicht.
Geht (Beispiel):
for %X in (*.jpg *.png) do @echo %X
Klappert allerdings ebenfalls zweimal das Verzeichnis ab.
> "Ist es mit Windows-Wildcards möglich, Dateien mit unterschiedlichen> Endungen zu einem einzigen Argument zu machen?"
Nein, nicht mit den Mitteln von Cmd. Mit der Powershell schon, dann
wird's aber wiederum kein handlicher Einzeiler mehr.
Rufus Τ. F. schrieb:> Das entscheidet das Programm, das Du mit Wildcards verwendest.
Klar. Wobei ich annehme, daß bei den einzelnen Kommandos die Attribute
halbwegs konsistent sind.
Rufus Τ. F. schrieb:> Zwar scheint Dein Lösungsansatz> nicht völlig unmöglich zu sein, aber damit behebst Du nur Symptome eines> anderswo gelagerten Problemes.
Das stimmt. Das Problem liegt darin, daß ich veränderbare und geschützte
Dateien innerhalb der selben Ordnerstruktur unterbringen muß (siehe der
andere Thread), um ein versehentliches Ändern der einen Dateien zu
verhindern und das Ändern der anderen Dateien so leicht wie möglich zu
machen.
Edit:
Problem "b)" ist ja eigentlich keins - ich kann ja die Kommandoparameter
in einen String packen.
Walter T. schrieb:> Wobei ich annehme, daß bei den einzelnen Kommandos die Attribute> halbwegs konsistent sind.
Das sind sie nicht. Das ist Windows, da arbeiten unterschiedliche Teams,
die komplett unterschiedliche Vorstellungen davon haben, wie so etwas
aussieht.
Vergleiche einfach mal den grundlegenden Aufbau der
Kommandozeilenargumente der alten, von DOS geerbten Kommandos mit so
etwas wie taskkill.
Walter T. schrieb:> Das stimmt. Das Problem liegt darin, daß ich veränderbare und geschützte> Dateien innerhalb der selben Ordnerstruktur unterbringen muß (siehe der> andere Thread), um ein versehentliches Ändern der einen Dateien zu> verhindern und das Ändern der anderen Dateien so leicht wie möglich zu> machen.
Wir sind doch Hacker hier. Also hacke was. Im .NET-Framework (geht auch
mit Mono, wenn auch nicht so "smart") gibt es den FileSystemWatcher, der
sogar recht freundlich im Sinne von CPU-Belastung ist. Den setzt du mit
ein paar Zeilen Code auf deine Verzeichnisse an und lässt ihn das tun,
was du möchtest.
Der FSW schaut je nach Suchmaske nach Dateien, an denen sich was ändert.
Du kannst da alles Mögliche veranstalten. Wenn du den Code dann noch in
einen Windows-Dienst packst, der beim Rechner-Start mit hochgefahren
wird, wird alles gut. Und sei beruhigt, auch wenn das nach ganz großem
Theater klingt, ist es nicht mehr als ein bisschen im MSDN lesen und ein
paar Millisekunden mehr beim Hochfahren für "yet another service to
run".
Codebeispiel:
Ist also keine große Magie oder Hexerei, nur bissel C# Code, den du mit
den Bordmitteln von Windows und .NET ganz entspannt übersetzen kannst,
sogar ohne installiertes Visual Studio.
Und jo, der Code ist nicht verlässlich, es soll ja auch nur den Weg zum
Ziel aufzeigen. Das "KeyValuePair" habe ich aus Zeitgründen benutzt. Mit
einem "Tuple" sieht es hübscher aus.
LG
Carsten
Carsten P. schrieb:> Im .NET-Framework (geht auch mit Mono, wenn auch nicht so "smart") gibt> es den FileSystemWatcher,
Den gibt es auch auf Betriebssystemebene mit den Win32-API-Funktionen
FindFirstChangeNotification, FindNextChangeNotification & Co., so
daß man nicht auf .Net angewiesen ist, um das nutzen zu können.
Walter T. schrieb:> Das stimmt. Das Problem liegt darin, daß ich veränderbare und geschützte> Dateien innerhalb der selben Ordnerstruktur unterbringen muß (siehe der> andere Thread), um ein versehentliches Ändern der einen Dateien zu> verhindern und das Ändern der anderen Dateien so leicht wie möglich zu> machen.
Schonmal was von Links gehört?
c-hater schrieb:> Schonmal was von Links gehört?
Ja, aber ich wüßte nicht, wie mir das weiterhelfen sollte. Schließlich
muß ein NTFS-Link für jede Datei einzeln erstellt werden - was in etwa
ähnlich aufwendig ist, wie die Rechte Dateiweise zu verteilen.
Carsten P. schrieb:> [etwas Quelltext und längliche Erklärung]
Ehrlich gesagt verstehe ich nicht, was einem Stück .NET-Code einfacher
oder zuverlässiger sein soll, als in einem vierzeiligen CMD-Script die
Schreibrechte zu setzen.
Walter T. schrieb:> Carsten P. schrieb:>> [etwas Quelltext und längliche Erklärung]>> Ehrlich gesagt verstehe ich nicht, was einem Stück .NET-Code einfacher> oder zuverlässiger sein soll, als in einem vierzeiligen CMD-Script die> Schreibrechte zu setzen.
Es war nur ein Vorschlag, genauso sinnvoll wie eine Aussage wie "Ich
muss les/schreibbare und sicherheitsrelevante Dateien im selben Ordner
unterbringen." Wenn dir das ein Kunde sagt, hoffe ich, dass du ohne den
Kunden auskommst. Man trennt auch unter Windows Dateien mit
verschiedenen Zugriffsbedürfnissen (nicht: Rechten) möglichst weit
voneinander weg.
Die üblichste Begründung für solch einen Eingriff in die auch nur
allereinfachsten Dinge in Sachen Sicherheit ist, dass die Mitarbeiter
sonst nicht zurecht kommen. Dann taugen die Mitarbeiter nichts, weil sie
nicht entsprechend geschult sind, weil ihr Arbeitgeber ein geiziges
Ar*** ist, und dann solltest du gehen -- wie gesagt, wenn du es dir
leisten kannst.
>> Das kommt dem, was Du willst, schon recht nahe, nur daß es zwei Listen> nacheinander ausgibt und jede mit der Überschrift "Verzeichnis von ..."> versehen wird.>> Wenn Du nur die Dateinamen und sonst nichts aufgelistet bekommen willst,> schreib's so:>>
1
dir *.jpg *.png /b
>> Sortieren geht dann mit /on (Dateiname) oder /od (Datum), bzw /o-n und> /o-d in umgekehrter Reihenfolge.
Hi Rufus,
mit dieser Info wirst du den Groll der Linuxgemeinde auf dich ziehen ;-)
Walter T. schrieb:> Das stimmt. Das Problem liegt darin, daß ich veränderbare und geschützte> Dateien innerhalb der selben Ordnerstruktur unterbringen muß (siehe der> andere Thread), um ein versehentliches Ändern der einen Dateien zu> verhindern und das Ändern der anderen Dateien so leicht wie möglich zu> machen.
Würd ich nen Git-Repo als Sicherheit drunter packen, dann Skript
ausführen und checken obs passt. Sich nur auf nen Skript zu verlassen
(ob nu C#, Batch oder weiß-der-Fuchs-was), wär mir da zu heiß