manzge90
Goto Top

Ordnerstruktur durchsuchen und abgleichen ob ein Ordner vorhanden ist

Hallo Zusammen,

ich bin in neu Anfänger in der Batch Programmierung und wollte Fragen ob es möglich ist per Batch-Datei eine Ordnerstruktur zu durchsuchen und wenn bestimmte Ordner vorhanden sind ein icalcs Befehl auszuführen.

Vielen Dank schon mal im vorraus

Content-Key: 265067

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

Ausgedruckt am: 29.03.2024 um 13:03 Uhr

Mitglied: 114757
114757 03.03.2015 aktualisiert um 09:38:12 Uhr
Goto Top
Batch
@echo off
for /f "delims=" %%a in ('dir /b /s /AD "c:\Ordner" ^| findstr /ie /c:"DichSuchIch"') DO @(  
    Rem icacls ...... %%a enthält den Ordnerpfad
)
Powershell
gci "c:\ordner" -recurse | ?{$_.PsIsContainer -and $_.Name -eq 'DichSuchIch'} | %{  
  # icacls ......... $_.Fullname enthält den vollen Pfad ....
}
Gruß jodel32
Mitglied: Manzge90
Manzge90 03.03.2015 um 10:14:20 Uhr
Goto Top
Hallo Jodel32,

danke erst mal für deine schnelle Antwort.

Wenn ich das so übernehme und nur meinen Pfad anpasse macht der icalcs befehl bei mir nichts.

Mein Quellcode sieht so aus:

@echo off

set Pfad="D:\Arbeiten\tmp\"

for /f "delims=" %%a in ('dir /b /s /AD "%Pfad%" ^| findstr /ie /D:"Aus"')
DO @(
icacls %%a\* /reset /t
)

Der Ordner liegt unter
D:\Arbeiten\tmp\Auftrag\Aus
Mitglied: 114757
114757 03.03.2015 um 11:04:20 Uhr
Goto Top
findstr /ie /D:"Aus"
nicht /D: sondern /c:
Mitglied: Manzge90
Manzge90 03.03.2015 um 11:53:39 Uhr
Goto Top
ich habe es mal so geändert und dann kommt bei mir die Meldung Syntaxfehler.

Schreibfehler oder ähnliches kann ich ausschließen, das habe ich extra nochmals gecheckt.
Woran könnte es liegen dass diese Meldung immer kommt?
Mitglied: 114757
114757 03.03.2015 aktualisiert um 12:06:15 Uhr
Goto Top
Zitat von @Manzge90:
ich habe es mal so geändert und dann kommt bei mir die Meldung Syntaxfehler.

Schreibfehler oder ähnliches kann ich ausschließen, das habe ich extra nochmals gecheckt.
Poste deinen ausgeführten Code mit Codetags für deinen Quellcode: <code> Quellcode </code>.
Du hast nämlich noch ein paar Anführungszeichen im icacls Befehl vergessen...

Geht hier einwandfrei, du musst also noch einen Fehler eingebaut haben genauso wie du das D von meinem Code ohne Grund ausgetauscht hast.

Welches OS wird verwendet ?
Mitglied: Manzge90
Manzge90 03.03.2015 um 12:09:15 Uhr
Goto Top
Hier der Code:

@echo off

for /f %%a in ('dir /b /s /AD "D:\Arbeiten\tmp" ^| findstr /ie /c:"Aus"')   
DO @( 
		icacls %%a\* /reset /t 
	)

Das OS ist Windows7 64Bit.

Gruß
Mitglied: colinardo
colinardo 03.03.2015 aktualisiert um 12:24:54 Uhr
Goto Top
Moin,
das DO @( darf nicht in eine neue Zeile face-wink und um %%a\* im icacls Befehl noch Anführungszeichen setzen, wie @114757 schon sagte.

Grüße Uwe
Mitglied: Manzge90
Manzge90 03.03.2015 um 13:06:55 Uhr
Goto Top
okay alles klar hab es mal so gemacht aber es tut sich nichts bzw das CMD Fenster blinkt nur die ganze zeit.

Der Code sieht momentan so aus

@echo off

for /f %%a in ('dir /b /s /AD "D:\Arbeiten\tmp" ^| findstr /ie /c:"Aus"') DO @(   
		icacls "%%a\*" /reset /t   
	)

Der gesuchte Ordner befindet sich unter
D:\Arbeiten\tmp\Auftrag\Aus

Wenn ich die For Schleife richtig verstanden habe listet der dir Befehl den kompletten Pfad bis zum letzten Ordner auf und sucht dann dort nach "Aus" und wenn er das findet führt er den icacls Befehl in dem Ordner "Aus" aus.
Wofür steht dann das "/c:" bei findstr?
Mitglied: colinardo
colinardo 03.03.2015 aktualisiert um 13:20:14 Uhr
Goto Top
Min Jung, du veränderst einfach den Code ohne zu wissen was du damit anstellst face-wink ....
Schau dir @114757 's Code nochmal ganz genau an, du hast nämlich erneut was weg gelassen ! ("delims=")
@echo off
for /f "delims=" %%a in ('dir /b /s /AD "D:\Arbeiten\tmp" ^| findstr /ie /c:"Aus"') DO @(   
	icacls "%%a\*" /reset /t   
)
Dann läuft das auch einwandfrei...

Wofür steht dann das "/c:" bei findstr?
findstr /?
liefert dir die Antwort !

Grüße Uwe
Mitglied: Manzge90
Manzge90 03.03.2015 um 14:22:24 Uhr
Goto Top
Das er mir den kompletten Pfad in die Variable schreibt funktionier soweit.
Danke mal dafür.

Ein kleines Mysterium habe ich noch und zwar wenn ich den icacls Bfehl direkt in der CMD ausführe funktioniert es wunderbar nur wenn ich es aus der Batch starte hört er nicht mehr auf und läuft endlos.

Hat einer eine Idee woran das liegen könnte?
Mitglied: 114757
114757 03.03.2015 aktualisiert um 14:55:54 Uhr
Goto Top
Zitat von @Manzge90:

Ein kleines Mysterium habe ich noch und zwar wenn ich den icacls Bfehl direkt in der CMD ausführe funktioniert es wunderbar
nur wenn ich es aus der Batch starte hört er nicht mehr auf und läuft endlos.

Hat einer eine Idee woran das liegen könnte?
Batch nicht als Admin ausgeführt?
Fehlender Parameter /c bei Icacls.
User unter dem die Batch läuft ist nicht Owner des Ordners oder einiger Dateien/Ordner ?!
Loop gebaut weil ein Symbolic Link im Ordner/Unterordner liegt ?

Script läuft hier ebenfalls problemlos.
Spezifiziere mal 'läuft endlos' was kommen für Ausgaben ?
Mitglied: Manzge90
Manzge90 03.03.2015 um 15:43:53 Uhr
Goto Top
Wenn ich die Batch direkt anstarte zeigt es mir gar nicht an also keine Rückgabe,
aber wenn ich die Batch aus der cmd starte zeigt es mir immer wieder den Befehl an.

Batch wurde als Admin ausgeführt und der Admin ist auch besitzer der Ordner und Dateien.
Ein Symbolic Link ist auch nicht drin da nur 2 .txt und 1 .xlsx in dem Testordner sind.
Mitglied: 114757
Lösung 114757 03.03.2015, aktualisiert am 05.03.2015 um 16:35:43 Uhr
Goto Top
Das riecht verdächtig nach falschem Zeichensatz mit der du deine Batch erstellt hast.