bigwim
Goto Top

Rückgabewert einer Variablen zuweisen (ohne Umweg einer Tempdatei)

Hallo zusammen,

ein Bespiel (auf das wesentliche gekürzt):

Die For-Schleife ermittelt mir die ersten drei Ebenen der Verzeichnisstruktur.
Für jede Ebene wird per xcacls die Berechtigungen in eine Datei geschrieben.

@echo off & Setlocal

Set LogFile=%~n0.log
if exist %LogFile% del %LogFile%

:QueryDir
for /f "tokens=1-4 delims=\" %%D in ('dir u:\daten\*.* /s /ad /b) do call :ScanDir "%%D\%%E\%%F\%%G"  
goto :eof

:ScanDir
xcacls %Pfadname% >>%logfile%



Mit
type %logfile% | find /i /c "%1"  
kann ich jetzt ermitteln, wie oft eine bestimmte Gruppe benutzt wird. Das Ergebnis ist eine Zahl.

Gibt es jetzt ein Konstrukt, dass mir die Rückgabe von type direkt einer Variabelen zuweist?
Also sinngemäß:
Set Anzahl <= type %logfile% | find /i /c "%1"  

Nach meinen Studien der Anleitungen und das Verfolgen der vielen Fragen, fürchte ich ja nicht. Aber es läßt mir halt keine Ruhe ....


Danke im voraus
Markus

Content-ID: 150674

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

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

miniversum
miniversum 09.09.2010 um 11:12:48 Uhr
Goto Top
Das geht auch mit einer For Schleife:
for /f "delims=" %%i in ('type %logfile% | find /i /c "%1"') do set Anzahl=%%i  
BigWim
BigWim 09.09.2010 um 11:47:30 Uhr
Goto Top
Auf so etwas habe ich gehofft!

Aber leider bin ich zu doof, dass anzuwenden. Vielleicht kannst Du mir noch einmal auf die Sprünge helfen.

Die Zeile für sich in einer CMD bringt keine Fehlermeldung und (logischerweise) keine Ausgabemeldung.
Ein zusätzliche Zeile mit Echo %Anzahl% oder ein Anhängen mit & echo %Anzahl% = keine Fehlermeldung & keine Ausgabe
"Alles" andere bringt mir die Fehlermeldung: "|" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Ich habe ja auch oft das ^ in Zusammenhang mit diesem Konstrukt gesehen. Da ich da immer noch den Durchblick habe, dachte ich mir: Probieren geht über Studieren. Ich bekomme keine Kombination (mit ohne ^, mit ohne ") hin, die mir Set Anzahl ausführt und füllt.

Markus


type getacl.log | find /i /c "s0210896"  

for /f "delims=" %%i in ('type getacl.log | ^find /i /c %1') do set Anzahl=%%i  

echo Anzahl ist %Anzahl% (%%i  %1)

wobei ich das Konstrukt ab find wie folgt abgeändert habe:
(51 ist das entsprechende Ergebnis)


Versuch 1:
C:\Tools\getacl>type getacl.log | find /i /c "s0210896"
51
"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.
C:\Tools\getacl>for /f "delims=" %i in ('type getacl.log | find /i /c "s0210896"
') do set Anzahl=%i


Versuch 2:
C:\Tools\getacl>type getacl.log | find /i /c "s0210896"
51
"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.
C:\Tools\getacl>for /f "delims=" %i in ('type getacl.log | ^find /i /c "s0210896
"') do set Anzahl=%i


Versuch 3:
C:\Tools\getacl>type getacl.log | find /i /c "s0210896"
51
"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.
C:\Tools\getacl>for /f "delims=" %i in ('type getacl.log | find /i /c s0210896')
do set Anzahl=%i
C:\Tools\getacl>m s0210896


Versuch 4:
C:\Tools\getacl>type getacl.log | find /i /c "s0210896"
51
"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.
C:\Tools\getacl>for /f "delims=" %i in ('type getacl.log | ^find /i /c s0210896'
) do set Anzahl=%i


Versuch 5:
C:\Tools\getacl>type getacl.log | find /i /c "s0210896"
51
"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.
C:\Tools\getacl>for /f "delims=" %i in ('type getacl.log | ^find /i /c s0210896'
) do set Anzahl=%i
miniversum
miniversum 09.09.2010 um 12:49:42 Uhr
Goto Top
Ach war mein Fehler. Ich habe das ungetestet geschrieben und dabei das | übersehen.
in einer For Schleife musst du das | mit dem ^ ausmaskieren, also so:
for /f "delims=" %%i in ('type %logfile% ^| find /i /c "%1"') do set Anzahl=%%i  
delims und tokens mußt du ggf. anpassen.
BigWim
BigWim 09.09.2010 um 13:13:49 Uhr
Goto Top
Super, Danke!

Jetzt funktioniert es.


in einer For Schleife musst du das | mit dem ^ ausmaskieren, also so:
Auch mein Fehler. Darf mich halt nicht (mehr) auf mein Gedächtnis verlassen. Ich hatte das ^ immer an der falschen Stelle eingefügt.


Markus