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-Key: 283791

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

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

Mitglied: 114757
114757 Sep 24, 2015 updated at 13:19:32 (UTC)
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
Member: BatchAnfaenger91
BatchAnfaenger91 Sep 28, 2015 at 08:08:50 (UTC)
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
Mitglied: 114757
114757 Sep 28, 2015 updated at 08:42:13 (UTC)
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 ...
Member: BatchAnfaenger91
BatchAnfaenger91 Sep 28, 2015 at 08:54:58 (UTC)
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ß
Mitglied: 114757
114757 Sep 28, 2015 updated at 14:35:54 (UTC)
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...
Member: BatchAnfaenger91
BatchAnfaenger91 Sep 28, 2015 at 15:04:23 (UTC)
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
Mitglied: 114757
114757 Sep 28, 2015 updated at 15:17:55 (UTC)
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
Member: BatchAnfaenger91
BatchAnfaenger91 Sep 29, 2015 at 08:18:17 (UTC)
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ß
Member: BatchAnfaenger91
BatchAnfaenger91 Sep 29, 2015 at 09:29:44 (UTC)
Goto Top
Hab den Fehler gefunden danke face-smile
Mitglied: 114757
114757 Sep 29, 2015 updated at 11:50:58 (UTC)
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ß
Member: BatchAnfaenger91
BatchAnfaenger91 Sep 29, 2015 updated at 12:17:40 (UTC)
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
Mitglied: 114757
Solution 114757 Sep 29, 2015, updated at Sep 30, 2015 at 11:29:56 (UTC)
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 ....