batchanfaenger91
Goto Top

Variable in Parameter speichern und bei der Ausgabe ignoieren

Hallo Leute ;)

ich habe ein Batch Skript geschrieben in dem ich Namen, Adresse, Orte und vieles mehr auslesen kann.

die Datei heißt Liste.bat

wenn ich die in der cmd ausgeben lasse bekomme ich alle Informationen die ich brauche. Ist es möglich durch Parameterübergabe bestimmte Inhalte auszublenden bzw. bei der Ausgabe ignoieren.

ich will das ich später eingeben kann -> Liste.bat /o München
/o will ich als Parameter übergeben

Es soll dann mir die Ergebnisse ohne den Ort München anzeigen

Aus einer For schleife werden die Orte in Parameter %%n gespeichert .. durch "echo %%n" sehe ich alle Orte

Wäre sehr hilfreich wenn einer mir da weiter helfen könnte

Viele Grüße
BatchAnfaenger91

Content-ID: 283791

Url: https://administrator.de/forum/variable-in-parameter-speichern-und-bei-der-ausgabe-ignoieren-283791.html

Ausgedruckt am: 10.01.2025 um 07:01 Uhr

114757
114757 24.09.2015 aktualisiert um 15:19:32 Uhr
Goto Top
Beispiel:
@echo off
set exclude=
REM Wenn der erste Batrch-Parameter '/o lautet weise den zweiten einer Variablen zu  
if /i "%~1" == "/o" set "exclude=%~2"  

if defined exlude (
	REM Wenn Filter gewünscht ...
	for /f "delims=" %%n in ('findstr /ivc:"%exclude%" "C:\Orte.txt"') DO @echo %%n  
) else (
  REM .... ohne Filter
) 
Gruß jodel32
BatchAnfaenger91
BatchAnfaenger91 28.09.2015 um 10:08:50 Uhr
Goto Top
Hey Jodel32

Danke für deine Hilfe, ist aber nicht genau das wonach ich gesucht habe.

Ich nenn mal ein anderes Beispiel: Gehen wir davon aus ich habe in meinen Skript ein Befehl der mir alle Shares + Pfad ausließt. (wmic share get name, path)

Nun will ich bei der Ausgabe einen bestimmten Pfad weglassen. Dies kann ich natürlich im Batch Skript mit findstr /v definieren, aber ich will das ich den Pfad in ein Paramter übergebe. Wenn ich dann CMD starte kann ich eintippen Test.bat /o C:\meinBatch\Test -> dieser wird dann bei der Ausgabe ignoiert.

Ist sowas möglich ?

Liebe Grüße

BatchAnfaenger91
114757
114757 28.09.2015 aktualisiert um 10:42:13 Uhr
Goto Top
Doch, das tut genau das ! In %~1 steht der erste Parameter drin und in %~2 der zweite usw. welcher an die Batch übergeben wird !
In Zeile 4 wird geprüft ob der Parameter /o angegeben wurde, und wenn ja, wird der Pfad welcher im zweiten Parameter steht in die Variable exclude gespeichert, welche du dann in deinem Skript verwenden kannst ...

Ein bißchen Doku lesen schadet nicht:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddoc ...
BatchAnfaenger91
BatchAnfaenger91 28.09.2015 um 10:54:58 Uhr
Goto Top
@echo off & setlocal ENABLEDELAYEDEXPANSION

set exclude= 
if /i "%~1" == "/o" set "exclude=%~2"  
if defined exclude (

	for /f "skip=2 tokens=1,2,3* delims=," %%k in ('findstr /ivc:"%exclude%^ "wmic share get Name^,Path /format: csv') DO @ (  
	set "name=%%l"  
)

echo !name!


meinst du es so ?

Gruß
114757
114757 28.09.2015 aktualisiert um 16:35:54 Uhr
Goto Top
meinst du es so ?
Fast leider ein paar Fehler drin....
@echo off & setlocal ENABLEDELAYEDEXPANSION
set exclude= 
if /i "%~1" == "/o" set "exclude=%~2"  
if defined exclude (
    for /f "skip=2 tokens=1,2,3* delims=," %%k in ('wmic share get Name^,Path /format:csv ^| findstr /ivc:"%exclude%"') DO @ (  
        echo %%a
    )
)

Meine Empfehlung lerne besser gleich Powershell, investiere in die Zukunft statt in die Vergangenheit...
BatchAnfaenger91
BatchAnfaenger91 28.09.2015 um 17:04:23 Uhr
Goto Top
Danke !
Jetzt funktioniert es wieder.

Nur habe ich gemerkt sobald ich die Parameter weglasse überspringt er mir die erste Ausgabe. Mit Parameter stimmt alles.

Sobald ich mit dem Skript fertig bin werde ich meine Zeit in in Powershell stecken face-smile

Grüße

BatchAnfaenger91
114757
114757 28.09.2015 aktualisiert um 17:17:55 Uhr
Goto Top
Nur habe ich gemerkt sobald ich die Parameter weglasse überspringt er mir die erste Ausgabe. Mit Parameter stimmt alles.
Ist ja logisch, diesen Fall musst du im else Teil abfangen wie in meinem ersten Code-Schnippsel gezeigt, dort kannst du dann die Abfrage ohne den Auschluss einbauen... mitdenken my friend face-wink
BatchAnfaenger91
BatchAnfaenger91 29.09.2015 um 10:18:17 Uhr
Goto Top
Hey

ja das meine ich ja obwohl ich den else Teil eingebaut habe so wie in deinen ersten Code. Habe da schon mitgedacht face-smile

Gruß
BatchAnfaenger91
BatchAnfaenger91 29.09.2015 um 11:29:44 Uhr
Goto Top
Hab den Fehler gefunden danke face-smile
114757
114757 29.09.2015 aktualisiert um 13:50:58 Uhr
Goto Top
Zitat von @BatchAnfaenger91:
Hab den Fehler gefunden danke face-smile
Na also... wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Danke.

Gruß
BatchAnfaenger91
BatchAnfaenger91 29.09.2015 aktualisiert um 14:17:40 Uhr
Goto Top
Hi

also soweit habe ich es hinbekommen wie ich es wollte. Nun interessiert mich aber noch eine kleine Sache

In dem Fall lese ich ich Zeilen aus und filter das gewünschte raus. Gibt es auch eine Möglichkeit nur in die Spalte PATH zu suchen und nicht in die komplette Zeile.

ich könnte "exclude=%~$PATH:2" setzen damit kann ich nur nach Pfad filtern. Wie ist es aber wenn ich nur den Anfang einer Zeile angeben will und es soll dann Am Anfang der Zeile suchen, sprich: meinbat.bat /o C:\Tes -> und dann soll er alles was mit C:\Tes anfängt ausfiltern. Das ist mit $PATH nicht möglich

Gruß

BatchAnfaenger91
114757
Lösung 114757 29.09.2015, aktualisiert am 30.09.2015 um 13:29:56 Uhr
Goto Top
Nerv ...
@echo off & setlocal ENABLEDELAYEDEXPANSION
set exclude= 
if /i "%~1" == "/o" set "exclude=%~2"  
if defined exclude (
    for /f "skip=2 tokens=1,2,3* delims=," %%a in ('wmic share get Name^,Path /format:csv') DO @ (  
        echo %%c | findstr /ic:"%exclude%" >nul || (  
            echo %%a
        )
    )
)
Normalerweise eine Frage zum Thema und nicht Tausende in einem Thread, danke ....