MichaelK wrote:Da hat aber jemanden der Ehrgeiz gepackt...
So isses.
Ich hab jetzt sogar den Ansatz, wie nur noch ein Fenster aufgeht, indem die Batch die Liste vom TC selbst entgegen nimmt. Noch wertet er die Flags nicht richtig aus, aber das kriege ich auch noch hin
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
@ echo off
for /f %%r in (%1) do (for /f "tokens=1,2,3,4*" %%i in ('attrib %%~fnxr') do if "%%i"=="A" ( if "%%j"=="SHR" (@ echo attrib "%%r" -s -h -r>>xpqrl.bat) else if "%%j"=="S" ( if "%%k"=="R" (@echo attrib "%%r" -s -r>>xpqrl.bat) else (@echo attrib "%%r" -s +R>>xpqrl.bat)) else if "%%j"=="HR" (@echo attrib "%%r" -h -r>>xpqrl.bat) else if "%%j"=="R" (@echo attrib "%%r" -r>>xpqrl.bat) else if "%%j"=="SH" (@echo attrib "%%r" -s -h +R>>xpqrl.bat) else if "%%j"=="H" (@echo attrib "%%r" -h +R>>xpqrl.bat) else (@echo attrib "%%r" +R>>xpqrl.bat)) else if "%%i"=="SHR" (@echo attrib "%%r" -s -h -r>>xpqrl.bat) else if "%%i"=="S" (if "%%j"=="R" (@echo attrib "%%r" -s -r>>xpqrl.bat) else (@echo attrib "%%r" -s +R>>xpqrl.bat)) else if "%%i"=="HR" (@echo attrib "%%r" -h -r>>xpqrl.bat) else if "%%i"=="R" (@echo attrib "%%r" -r>>xpqrl.bat) else if "%%i"=="SH" (@echo attrib "%%r" -s -h +R>>xpqrl.bat) else if "%%i"=="H" (@echo attrib "%%r" -h +R>>xpqrl.bat) else (@echo attrib "%%r" +R>>xpqrl.bat))
for /f %%r in (%1) do (for /f "tokens=1,2,3,4*" %%i in ('attrib %%~fnxr') do if "%%i"=="A" ( if "%%j"=="SHR" (@ echo attrib "%%r" +S +H>>xpqrl.bat) else if "%%j"=="S" ( if "%%k"=="R" (@echo attrib "%%r" +S>>xpqrl.bat) else (@echo attrib "%%r" +S>>xpqrl.bat)) else if "%%j"=="HR" (@echo attrib "%%r" +H>>xpqrl.bat) else if "%%j"=="R" (@echo attrib "%%r" >>NUL) else if "%%j"=="SH" (@echo attrib "%%r" +S +H>>xpqrl.bat) else if "%%j"=="H" (@echo attrib "%%r" +H>>xpqrl.bat) else (@echo attrib "%%r" >>NUL)) else if "%%i"=="SHR" (@echo attrib "%%r" +S +H>>xpqrl.bat) else if "%%i"=="S" (if "%%j"=="R" (@echo attrib "%%r" +S>>xpqrl.bat) else (@echo attrib "%%r" +S>>xpqrl.bat)) else if "%%i"=="HR" (@echo attrib "%%r" +H>>xpqrl.bat) else if "%%i"=="R" (@echo attrib "%%r" >>NUL) else if "%%i"=="SH" (@echo attrib "%%r" +S +H>>xpqrl.bat) else if "%%i"=="H" (@echo attrib "%%r" +H>>xpqrl.bat) else (@echo attrib "%%r" >>NUL))
call xpqrl.bat
del xpqrl.bat
Diese Batch einfach mit '%l' per Button starten, dann wird in den markierten Dateien das R-Flag getoggelt. Das kleine '%l' ist wichtig, falls im Pfad ein Leerzeichen vorkommt.
sheepdog
Last edited by Sheepdog on 2004-07-16, 10:24 UTC, edited 1 time in total.
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Hast Du beim R entfernen wieder alle Dateien ausgewählt?
Ich habe gerade noch mal die Batch in meinen Editor kopiert und gespeichert. Funktioniert ausgezeichnet.
/offtopic: Hast Du zuviel Zeit?
Nicht wirklich, aber da hatte mich der ehrgeiz gepackt .
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Hast Du beim R entfernen wieder alle Dateien ausgewählt?
Jo, alle Dateien ausgewählt. Einzeln klappt's aber auch nicht, das R weigert sich beharrlich.
Nicht wirklich, aber da hatte mich der ehrgeiz gepackt .
So'n bißchen proggen hält das Hirn geschmeidig, kein Grund rot anzulaufen.
Poste den Code doch mal als MIME, vielleicht ist es ja nur ein Copy&Paste Error aufgrund von Leerzeichen am Ende der Zeilen. Ansonsten bliebe noch das OS als Ursache, XP hier. Habe den Code auch noch nicht überprüft, zu müde...
Mehr macht meine Batch ja nicht, und dann wieder +S +H, falls die gesetzt waren.
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
Ursache war, daß ich die Batch vom Windowsverzeichnis auf die Buttonbar gezogen habe. Dabei wird auch der Startpfad automatisch festgelegt auf D:\WINDOWS\
Das scheint beim Setzen von R wurscht zu sein, beim Entfernen von R aber nicht.
Löschen des Startpfads reicht aus, damit's funktioniert.
Lefteous wrote:Alternativ könnte man auch ein C Programm nehmen und darauf dann Lst2Multi ansetzen.
An dem lst2mlt hat mich ja gestört, dass bei 24 Dateien auch 24 Fenster aufpoppen. Die Batch-Variante für lst2mlt habe ich hier schon geliefert.
Dein c-Programm ist ja sehr viel kürzer und sicher eleganter, aber man muss dafür halt auch mindestens einen c-compiler installieren (oder installiert haben) und wissen, wie man das compiled.
Außerdem sollte das auch nur als workaround dienen, bis @ghisler ein cm_ChangeAtrrib mit Parameterübergabe einbaut.
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
An dem lst2mlt hat mich ja gestört, dass bei 24 Dateien auch 24 Fenster aufpoppen.
Du meinst wenn man es mit einem Konsolenprogramm respektive einer Batchdatei füttert, oder?
Dein c-Programm ist ja sehr viel kürzer und sicher eleganter, aber man muss dafür halt auch mindestens einen c-compiler installieren (oder installiert haben) und wissen, wie man das compiled.
Lefteous wrote:Du meinst wenn man es mit einem Konsolenprogramm respektive einer Batchdatei füttert, oder?
Passiert das nicht bei ner exe?
Meine batch wurde jedenfalls so oft aufgerufen, wie ich Dateien ausgewählt hatte. Und entsprechend viele DOS-Fenster wurden geöffnet (und wieder geschlossen).
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
EXE kann entweder ein Konsolenprogramm oder eine GUI.Anwendung sein. Bei einer GUI-Anwendung wird normalerweise kein Konsolenfenster erzeugt und auch nicht zwingend ein Applikations- oder Dialogfenster.
Meine batch wurde jedenfalls so oft aufgerufen, wie ich Dateien ausgewählt hatte. Und entsprechend viele DOS-Fenster wurden geöffnet (und wieder geschlossen).
Ja das ist schon richtig so. Auch wenn man das C-Programm nehmen würde, würde es entsprechend x-mal aufgerufen werden, aber es werden keine x-Fenster erzeugt.
Lefteous wrote:Ja das ist schon richtig so. Auch wenn man das C-Programm nehmen würde, würde es entsprechend x-mal aufgerufen werden, aber es werden keine x-Fenster erzeugt.
Vielleicht sollte man im Microsoft forum mal eine Poll machen, ob die Option 'DOS-Fenster minimiert aufrufen' eingebaut werden soll.
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams
icfu wrote:Ursache war, daß ich die Batch vom Windowsverzeichnis auf die Buttonbar gezogen habe. Dabei wird auch der Startpfad automatisch festgelegt auf D:\WINDOWS\
Das scheint beim Setzen von R wurscht zu sein, beim Entfernen von R aber nicht.
Löschen des Startpfads reicht aus, damit's funktioniert.
Ich habe den Bug gefunden - das 'attrib %~nxr%' in der inneren Schleife findet natürlich die Dateien nicht, während das '%%r', das in die Batch geschrieben wird den kompletten Pfad enthält. Leider kann man nicht 'attrib %%r' benutzen, da dann Dateien mit Leerzeichen im Pfad nicht gefunden werden. Und das +R wird halt gesetzt, wenn alle anderen Abfragen nicht zutreffen.
Aber ich habe jetzt noch ein 'f' mit eingebaut, und jetzt sollte es auch funktionieren, wenn man die Batch auf einen Button zieht.
Danke für den Beta-Test.
sheepdog
"A common mistake that people make when trying to design something
completely foolproof is to underestimate the ingenuity of complete fools."
Douglas Adams