
43060
13.02.2007, aktualisiert am 14.02.2007
Batch Befehl Attrib: Warum kennt es keine Wildcards mehr?
Hallo zusammen,
ich möchte einfach nur von einem Verzeichnis rekursiv alle darin enthaltenen Dateien und Unterverzeichnisse das Archivbit entfernen lassen. Dieser Einzeiler sollte funktionieren, tut es aber nicht:
attrib -a "c:\test\*.*" /s
Auch ohne Anführungszeichen verweigert Attrib seinen Dienst mit dem Kommentar "Datei c:\test\*.* nicht gefunden". Dabei sollen die Wildcards *.* in Verbindung mit dem Parameter /s ja eben rekursiv suchen und nicht nur nach einer einzelnen Datei.
Was mache ich da falsch bzw. was läuft da falsch?
Gruß,
Addi
ich möchte einfach nur von einem Verzeichnis rekursiv alle darin enthaltenen Dateien und Unterverzeichnisse das Archivbit entfernen lassen. Dieser Einzeiler sollte funktionieren, tut es aber nicht:
attrib -a "c:\test\*.*" /s
Auch ohne Anführungszeichen verweigert Attrib seinen Dienst mit dem Kommentar "Datei c:\test\*.* nicht gefunden". Dabei sollen die Wildcards *.* in Verbindung mit dem Parameter /s ja eben rekursiv suchen und nicht nur nach einer einzelnen Datei.
Was mache ich da falsch bzw. was läuft da falsch?
Gruß,
Addi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 51530
Url: https://administrator.de/forum/batch-befehl-attrib-warum-kennt-es-keine-wildcards-mehr-51530.html
Ausgedruckt am: 23.04.2025 um 06:04 Uhr
8 Kommentare
Neuester Kommentar

Hallo,
von wo aus startest Du den Einzeiler denn?
gruß
onegasee59
von wo aus startest Du den Einzeiler denn?
gruß
onegasee59

Es handelt sich um ein Verzeichnis mit Unterverzeichnissen in denen jeweils Dateien liegen.
hhmm, dann kann ich auch keinen Fehler erkennen, denn so wäre Deine Befehlszeile völlig korrekt. Damit werden ALLE Dateien in allen Ordner mit der Attribut -a versehen.
test doch mal diesen schnippsel in einer attrib.cmd
@echo off
echo Setzen von Attribut -a
attrib -a "c:\test\*.*" /s
pause
cls
echo Kontrolle ob Attribut -a gesetzt wurde
echo.
dir c:\test /a:-a
pause
cls
echo Setzten von attribut -a wieder ruecksetzen
pause
cls
echo Setzen von Attribut +a
attrib +a "c:\test\*.*" /s
pause
cls
echo Kontrolle ob Attribut +a gesetzt wurde
echo.
dir c:\test /a:a
pause
gruß
onegasee59

dann startest Du die CMD vermutlich nicht auf LW C?
Problematisch wird sowas, wenn Du eine komplexere Batch für jemand anderen schreibst von der Du nicht weist wo man sie letztendlich ablegt und die gesamte Batch sogar noch aus mehren *.cmd-Modulen besteht. Dabei muss man sicherstellen das nach Abarbeitung eines Befehls die "aufgerufene.cmd" immer wieder zur "aufrufenden.cmd" und damit zum Startpfad der Batch zurückwechselt.
ich mach sowas daher immer so in der "Start.cmd" einer Batch.
... ganz am Anfang der "Start.cmd" kommt
...
set startpfad=%~dp0
...die Variable "%startpfad%" ermittelt automatisch den Pfad von der die Batch gestartet wird.
...Interessant vor allem dann, wenn man eine Batch auf USB-Stick einsetzt, wo man letztendlich
...das zugewiesene LW nicht kennt und nicht fest vorgeben kann.
...Der Inhalt von %startpfad% = LW:/Startpfad der Batch/
...Wenn ich also aus der "Start.cmd" einen weitere "*.cmd" aufrufen muss folgt:
call "%startpfad%weitere_Befehlsliste.cmd"
...ich bin jetzt in der "weitere_Befehlsliste.cmd"
...mit "pushd" gebe ich jetzt an das ich in ein anders LW:/Pfad wechseln will,
...die Batch sich aber merken soll von wo ich gekommen bin, also "%startpfad%weitere_Befehlsliste.cmd"
pushd "LW:X\irgendein_pfad"
...hier folgen die Befehle für das was ich in "LW:X\irgendein_pfad" machen will
popd
...mit "popd" kehre ich wieder zurück zu dem Pfad von dem ich "LW:X\irgendein_pfad" aufgerufen habe,
...also "%startpfad%weitere_Befehlsliste.cmd"
hoffe das war nicht zu verwirrend.
gruß
onegasse59
Problematisch wird sowas, wenn Du eine komplexere Batch für jemand anderen schreibst von der Du nicht weist wo man sie letztendlich ablegt und die gesamte Batch sogar noch aus mehren *.cmd-Modulen besteht. Dabei muss man sicherstellen das nach Abarbeitung eines Befehls die "aufgerufene.cmd" immer wieder zur "aufrufenden.cmd" und damit zum Startpfad der Batch zurückwechselt.
ich mach sowas daher immer so in der "Start.cmd" einer Batch.
... ganz am Anfang der "Start.cmd" kommt
...
set startpfad=%~dp0
...die Variable "%startpfad%" ermittelt automatisch den Pfad von der die Batch gestartet wird.
...Interessant vor allem dann, wenn man eine Batch auf USB-Stick einsetzt, wo man letztendlich
...das zugewiesene LW nicht kennt und nicht fest vorgeben kann.
...Der Inhalt von %startpfad% = LW:/Startpfad der Batch/
...Wenn ich also aus der "Start.cmd" einen weitere "*.cmd" aufrufen muss folgt:
call "%startpfad%weitere_Befehlsliste.cmd"
...ich bin jetzt in der "weitere_Befehlsliste.cmd"
...mit "pushd" gebe ich jetzt an das ich in ein anders LW:/Pfad wechseln will,
...die Batch sich aber merken soll von wo ich gekommen bin, also "%startpfad%weitere_Befehlsliste.cmd"
pushd "LW:X\irgendein_pfad"
...hier folgen die Befehle für das was ich in "LW:X\irgendein_pfad" machen will
popd
...mit "popd" kehre ich wieder zurück zu dem Pfad von dem ich "LW:X\irgendein_pfad" aufgerufen habe,
...also "%startpfad%weitere_Befehlsliste.cmd"
hoffe das war nicht zu verwirrend.
gruß
onegasse59