bruendl
Goto Top

Text Zeilenweise auslesen und variable überprüfen

Moin Moin,

ich habe eine Textdatei mit folgendem Inhalt:

"C:\[Pfad]" DOMÄNE\user:(I)(RX,W)
.....
.....
usw.

ich möchte jetzt gerne die beiden Werte, die von einem Leerzeichen getrennt sind mit einer FOR-Schleife einlesen und dann mit IF eine der Variablen überprüfen, ob "(RX,W)" enthalten ist. Sollte die Überprüfung positiv sein soll ein weiterer Befehl ausgeführt werden.

Ich habe folgendes versucht:

FOR /F "tokens=1,2" %%i in (out.txt) DO IF "%%j"=="*(RX,W)" && echo gefunden > habs.txt  
Dies erst einmal nur zum testen. Hier scheint er über das && nicht hinauszukommen.

Das gleich habe ich auch schon mit FIND und FINDSTR versucht. Hier scheint er aber die Variable %%j nicht interpretieren zu können. Er möchte hier immer irgendwie ein Textdokument haben.

Würde mich freuen ein paar Anregungen zu bekommen und Danke im Voraus.


Bruendl

Content-Key: 259945

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

Printed on: April 16, 2024 at 21:04 o'clock

Mitglied: 114757
114757 Jan 15, 2015 updated at 14:07:24 (UTC)
Goto Top
findstr /ie "(RX,W)" "C:\out.txt" && echo Gefunden || echo Nicht gefunden  
Gruß jodel32
Member: Bruendl
Bruendl Jan 15, 2015 at 14:19:27 (UTC)
Goto Top
Danke jodel32 für deine schnelle Antwort.

Ich glaube ich habe zu wenig erzählt. Die Textdatei Out.txt enthält mehrere Pfade und mehrere Rechte, die jeweils von einem Leerzeichen getrennt sind. Ich möchte erreichen, dass die Variable %%j überprüft wird ob (RX,W) enthalten ist. Wenn dies der Fall ist soll ein anderes Recht auf diesen Pfad gesetzt werden. Weswegen ich ja die Variable %%i dann benötige.

Vielleicht irgendwelche Ideen dazu?
Mitglied: 114757
114757 Jan 15, 2015 updated at 16:23:04 (UTC)
Goto Top
und was machst du wenn dein Pfad Leerzeichen enthält :-P

ansonsten musst du die Anführungszeichen als Delimiter benutzen ...
Member: Bruendl
Bruendl Jan 15, 2015 at 14:47:37 (UTC)
Goto Top
Danke ich teste das gleich mal aus. Bzgl. der Leerzeichen in meinem Textdokument sind alle Pfade in "".
Mitglied: 114757
114757 Jan 15, 2015 updated at 16:23:15 (UTC)
Goto Top
Zitat von @Bruendl:

Danke ich teste das gleich mal aus. Bzgl. der Leerzeichen in meinem Textdokument sind alle Pfade in "".
Das bringt hier aber nix face-wink
Mit den Anführungszeichen als Trenner etwa so
for /f tokens^=1^,2^ delims^=^" %%i in (out.txt) DO @(  
    echo %%j| findstr /ie "(RX,W)" >nul && echo %%i  
)
Member: Bruendl
Bruendl Jan 15, 2015 updated at 14:54:54 (UTC)
Goto Top
Achso ... face-sad

Ich dachte, dass wenn ich keinen Delimter setze diese standardmäßig ein Leerzeichen ist. Und wenn ich jetzt bspw. "C:\test test\test.txt" habe, dann wird das nicht so in %%i gespeichert?
Mitglied: 114757
114757 Jan 15, 2015 updated at 15:03:26 (UTC)
Goto Top
Zitat von @Bruendl:

Achso ... face-sad

Ich dachte, dass wenn ich keinen Delimter setze diese standardmäßig ein Leerzeichen ist. Und wenn ich jetzt bspw.
"C:\test test\test.txt" habe, dann wird das nicht so in %%i gespeichert?

Nope ...
In deinem Beispiel wären dann in %%i
"C:\test
Und in %%j
test\test.txt"

Siehe Lösung oben mit Anführungszeichen als Trenner
Member: Bruendl
Bruendl Jan 15, 2015 at 15:24:03 (UTC)
Goto Top
Das ist ja doch alles gar nicht so einfach face-big-smile.

Ich habe das jetzt genau so übernommen wie von die gepostet und die Batch bleibt nicht an meiner Pause nach der Schleife hängen. Bei den Tokens steht jetzt 2,3 anstatt von 1,2. Hängt das mit den "" zusammen?
Mitglied: 114757
114757 Jan 15, 2015 updated at 17:16:26 (UTC)
Goto Top
sorry da waren noch ein paar Fehler drin denn das Anführungszeichen ist als speziell zu betrachten:
for /f tokens^=1^,2^ delims^=^" %%i in (out.txt) DO @(  
    echo %%j| findstr /ie "(RX,W)" >nul && echo %%i  
)
Member: Bruendl
Bruendl Jan 15, 2015 at 16:30:53 (UTC)
Goto Top
Cool danke werde ich gleich einmal testen
Member: Bruendl
Bruendl Jan 19, 2015 at 21:01:25 (UTC)
Goto Top
So konnte es soweit testen und es funktioniert sehr gut. Ich möchte jetzt gerne nach dem && zwei befehle ausführen:

icacls %%i /deny %%j:(NP)(D,WDAC,WO,WEA,DC,WA)
icacls%%i /grant %%j:(NP)(RX,WD,AD)

Einerseits bekomme ich es nicht hin nur den einen Befehl auszuführen. Da bricht die Batch dann immer ab, geschweige denn beide hintereinander. Die Variable %%j soll jetzt auch nur den Benutzer wiederspiegeln und nicht die Berechtigungen. Kann man diese wegkürzen? Oder besteht die Möglichkeit, dass meine Out.txt folgendermaßen aussieht:
"C:\[Pfad]" "DOMÄNE\user" ":(I)(RX,W)"  
..... 
..... 
usw.

Bei der Sortierung der Out.txt. Kann ich recht varibel sein.

MFG

Bründl