43060
Goto Top

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

Content-Key: 51530

Url: https://administrator.de/contentid/51530

Ausgedruckt am: 28.03.2024 um 18:03 Uhr

Mitglied: cykes
cykes 13.02.2007 um 10:48:17 Uhr
Goto Top
Funktioniert hier problemlos, mit und ohne die " " unter Win XP SP2
Mitglied: 36539
36539 13.02.2007 um 11:07:58 Uhr
Goto Top
Hallo,

von wo aus startest Du den Einzeiler denn?

gruß
onegasee59
Mitglied: cykes
cykes 13.02.2007 um 11:30:01 Uhr
Goto Top
Befinden sich denn Dateien in dem Ordner C:\test ? Wenn es nur um das Archivbit von Ordnern
geht musst Du hinten an den Befehl noch ein "/D" anfügen.
Mitglied: 43060
43060 13.02.2007 um 13:51:03 Uhr
Goto Top
Es handelt sich um ein Verzeichnis mit Unterverzeichnissen in denen jeweils Dateien liegen. Die Meldung erhalte ich sowohl wenn ich den Befehl direkt über die CMD eingebe, als auch wenn ich es per Skript über die Powershell ausführe. Deshalb bin ich recht ratlos.

WinXP Pro SP2

Gruß,
Addi
Mitglied: 36539
36539 13.02.2007 um 14:51:52 Uhr
Goto Top
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
Mitglied: 43060
43060 13.02.2007 um 15:01:02 Uhr
Goto Top
Da direkt beim Versuch die Fehlermeldung erscheint, braucht man da eigentlich auch nichts überprüfen.

Ich habe jedoch einen Umweg gefunden, worüber es funktioniert.

cd c:\test
attrib -a *.* /s 

Auf diese Weise funktioniert es komischerweise. Ich wechsle zuerst in das entsprechende Verzeichnis und wende dann die Wildcard alleine ohne Verzeichnisangabe an. Ist dann zwar ein Zweiteiler aber wenigstens fu.nzt es auf diese Weise. Verstehe wer will.

Gruß,
Addi
Mitglied: 36539
36539 13.02.2007 um 15:16:37 Uhr
Goto Top
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. face-wink

gruß
onegasse59
Mitglied: 43060
43060 14.02.2007 um 08:24:43 Uhr
Goto Top
Danke für die Info. Nun der Pfad inkl. Laufwerksbuchstabe ist festgegeben. Darüber hinaus handelt es sich hier auch nicht um ein Batch-Script in der CMD. Ich führe den Befehl in der Powershell aus.

Gruß,
Addi