Batch so umschreiben, dass alles in eine Datei passt
Ja der Thementitel sagt eigentlich schon, wobei mir geholfen werden soll.
Der folgende Code soll halt so umgeschrieben werden, dass mir keine temporären Dateien während des Vorgangs erstellt werden:
Ich hoffe ihr könnt mir helfen
MfG Karsten
Der folgende Code soll halt so umgeschrieben werden, dass mir keine temporären Dateien während des Vorgangs erstellt werden:
@echo off & setlocal
echo set /a s=%%s%%+1 > ip.bat
echo set ip%%s%%=%%1 >> ip.bat
set log=netz.txt
del %log% 2>nul
echo Deine IP Adressen sind:
echo.
ipconfig/all | findstr "IP-Ad" > ip.txt
set s=0
for /f "tokens=14*" %%i in (ip.txt) do call ip %%i%%j
pause
del ip.txt
del ip.bat
echo %ip1%
MfG Karsten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 146078
Url: https://administrator.de/forum/batch-so-umschreiben-dass-alles-in-eine-datei-passt-146078.html
Ausgedruckt am: 23.12.2024 um 03:12 Uhr
16 Kommentare
Neuester Kommentar
Moin kkboy94,
hast du toll kommentiert, diesen Code.
Ich will da ja nicht wieder den Wüstenrufer spielen müssen, aber wenn jetzt genauso kommentarfreie Lösungen kommen, dann hilft dir das nur begrenzt.
Anyhow, ohne Temporärmüllerei in etwa so (Demo am CMD-Prompt; ">" nicht mit eingeben):
Ausgabe wäre sinngemäß:
Solche kommentarfreien Hütchenspieler-Kunststücke gibt es aber auch anner Tanke....
Grüße
Biber
hast du toll kommentiert, diesen Code.
Ich will da ja nicht wieder den Wüstenrufer spielen müssen, aber wenn jetzt genauso kommentarfreie Lösungen kommen, dann hilft dir das nur begrenzt.
Anyhow, ohne Temporärmüllerei in etwa so (Demo am CMD-Prompt; ">" nicht mit eingeben):
> @(echo Deine IP-Adressen sind) & @for /f "tokens=1,3 delims=:" %i in ('ipconfig/all^|findstr "IP-Ad"^|findstr /n $') do @echo. IP%i=%j
Deine IP-Adressen sind
IP1= xxx.168.1.130
IP2= zz.180.xxx.37
Solche kommentarfreien Hütchenspieler-Kunststücke gibt es aber auch anner Tanke....
Grüße
Biber
Moin kkboy94,
Der Tag heute hat doch noch 4 Stunden... und notfalls noch die Nacht *g
1) Such-Argumente ohne die Anführungszeichen drumherum
2) Und interpretiert u.a. die Zeichen "$" und "^" als "Nicht als Zeichen gemeint" . "^" bedeutet "(am) Zeilenanfang" und "$" bedeutet "(am) Zeilenende"
Beispiele für die Nutzung wären
FindStr "^a" *.txt --------> alle Zeilen aller *.txt-Dateien, die "am Zeilenanfang" beginnen mit "a"
Findstr "y$" *.txt -------> alle Zeilen aller *.txt-Dateien, die direkt vor dem Zeilenende ein "y" stehen haben.
FindStr "^$" *.txt -------> alle Leerzeilen, d.h. auf den Zeilenbeginn folgt sofort das Zeilenende
Der Parameter /n ist abgeleitet von "/nuMalAlleDurchzählen" und nummeriert die Ergebniszeilen stupide durch.
Hmm, "können" eigentlich keine wirklich.
Die meisten Makro- und Interpreterwerkzeuge machen mir nicht so richtig Angst... (also so die Leichtgewichte von CMD-Batch bis VBS/VBA).
In einige "echten" Programmiersprachen habe ich zumindest programmiert und für das Ergebnis Geld erhalten.
Früher ASM, COBOL, Clipper/xBASE-Dialekte, C; später VB/.#.NET, Java und immer wieder SQL.
Aber eigentlich beschäftige mich ich eher mit DWHs, DataMining, ETL-Prozessen und dem Konvertieren heterogener Datenfriedhöfe in zwölfdimensionale Cubes & Slices.
Das beim Skripten erlernte Fluchen in 17++ Sprachen kann ich dabei weiternutzen.
Grüße
Biber
Der Tag heute hat doch noch 4 Stunden... und notfalls noch die Nacht *g
Ich habs von ner anderen Internetseite, auf der das auch genauso wenig kommentiert ist.
Dann bring es wieder dahin zurück bitte. Bei Wunsch kann ich die ja auch mal posten.
Ja nee...eilt nicht...Mal noch ne kurze Frage: Wie kommst du auf "findstr /n $" in der Schleife?
"Findstr.exe" akzeptiert im Gegensatz zu "find.exe" auch1) Such-Argumente ohne die Anführungszeichen drumherum
2) Und interpretiert u.a. die Zeichen "$" und "^" als "Nicht als Zeichen gemeint" . "^" bedeutet "(am) Zeilenanfang" und "$" bedeutet "(am) Zeilenende"
Beispiele für die Nutzung wären
FindStr "^a" *.txt --------> alle Zeilen aller *.txt-Dateien, die "am Zeilenanfang" beginnen mit "a"
Findstr "y$" *.txt -------> alle Zeilen aller *.txt-Dateien, die direkt vor dem Zeilenende ein "y" stehen haben.
FindStr "^$" *.txt -------> alle Leerzeilen, d.h. auf den Zeilenbeginn folgt sofort das Zeilenende
Der Parameter /n ist abgeleitet von "/nuMalAlleDurchzählen" und nummeriert die Ergebniszeilen stupide durch.
[OT]
Welche Sprachen kannst du eigentlich alle, Biber?
[/OT]
Welche Sprachen kannst du eigentlich alle, Biber?
[/OT]
Hmm, "können" eigentlich keine wirklich.
Die meisten Makro- und Interpreterwerkzeuge machen mir nicht so richtig Angst... (also so die Leichtgewichte von CMD-Batch bis VBS/VBA).
In einige "echten" Programmiersprachen habe ich zumindest programmiert und für das Ergebnis Geld erhalten.
Früher ASM, COBOL, Clipper/xBASE-Dialekte, C; später VB/.#.NET, Java und immer wieder SQL.
Aber eigentlich beschäftige mich ich eher mit DWHs, DataMining, ETL-Prozessen und dem Konvertieren heterogener Datenfriedhöfe in zwölfdimensionale Cubes & Slices.
Das beim Skripten erlernte Fluchen in 17++ Sprachen kann ich dabei weiternutzen.
Grüße
Biber
Moin kkboy94,
einmal grob drübergeharkt habe ich, aber nichts getestet.
Sicher ist:
Skizze liegt bei.
Grüße
Biber
P.S:
Sagen wir so... - wenn es funktioniert, lässt sich damit ALLES berechnen, belegen und beweisen.
Die Firma BP beispielsweise berechnet damit sowohl statische Notwendigkeiten von Bohrinseln wie aus Quartalsbilanzen oder den Wassergehalt im Golf von Mexiko.
einmal grob drübergeharkt habe ich, aber nichts getestet.
Sicher ist:
- die Zeilen 2 und 3 in deinem Schnipsel müssen getauscht werden
- es müssen beide FOR-jede-IP-nudele-mit-FOR-alle-vorhandenen-Subnetze-druch-Anweisungen auch ineinander geschraubt werden.
Skizze liegt bei.
@echo off & setlocal
set "log=netz.txt" & :: Böse Falle...
:: --> wenn du den Batch aus Verzeichnis "D:\temp" heraus aufrufst--> Logfile "D:\Temp\netz.txt
:: --> wenn du den Batch aus Verzeichnis "C:\....\Desktop" heraus aufrufst--> Logfile "C:\...Desktop\netz.txt
del %log% 2>nul
rem Es wird jede IP für jedes aktive Netzwerkadapter herausgefunden und auf dem Bildschirm angezeigt
echo Deine IP-Adressen sind
for /f "tokens=1,3 delims=:" %%i in ('ipconfig/all^|findstr "IP-Ad"^|findstr /n $') do (
echo. IP%%i=%%j
rem hier wird die oben herausgefundene IP für den weiter unten beschriebenen Vorgang "vorbereitet"
Call :TMosPart %%j
)
:goto :eof
-------> Ende des ganzen Batches
### Raum für Notizen ###
:TMosPart
for /f "tokens=1,2,3 delims=." %%a in ("%~1") do set ipa=%%a.%%b.%%c.
echo %ipa%
::-------> ab hier hab ich nicht mehr geschaut, was da gemacht wird, nur die Zeilenumbrüche reinformatiert
rem Nun sollen alle Möglichen Ip's eines C-Klasse-Netzwerks angepingt werden und das Ergebnis in ein log geschrieben werden
FOR /L %%p IN (1,1,254) do (
title %ipa%%%p
for /f "tokens=2 delims= " %%A in (
'ping -a %ipa%%%p -n 1 ^| FIND "[%ipa%%%p]"'
) DO ECHO.%%A;%ipa%%%p>>%log%
)
echo.
goto :eof ::Ende von TMosPart
pause
Grüße
Biber
P.S:
Aber eigentlich beschäftige mich ich eher mit DWHs, DataMining, ETL-Prozessen und dem Konvertieren
heterogener Datenfriedhöfe in zwölfdimensionale Cubes & Slices.
Der letzte teil hört sich mörderisch anheterogener Datenfriedhöfe in zwölfdimensionale Cubes & Slices.
Die Firma BP beispielsweise berechnet damit sowohl statische Notwendigkeiten von Bohrinseln wie aus Quartalsbilanzen oder den Wassergehalt im Golf von Mexiko.
Moin kkboy,
mit der Zeile 16 hast du natürlich Recht... wie geschrieben, ich hab auch nur grob durchgeharkt und nicht getestet.
Ändere ich auch NICHT in der Skizze oben.
Ja, diese Antwort ist ein bisschen versteckt in den "Befehl /?"-Hilfen am CMD-Prompt.
In der Hilfe zu CALL ("call /?") steht es beispielsweise:
Mehr Geheimnis verbirgt sich nicht dahinter...
... aber wenn man/frau es nicht zufällig irgendwo in einem Batch gelesen hat, sucht/kennt es auch niemand.
Hier im konkreten Schnipsel ist es eher überflüssig, aber es kommt bei mir auch automatisch,
wenn ich explizit einen Parameter in Anführungszeichen setze (wie in der FOR-Anweisungs-Klammer),
dass ich dann evtl. ohnehin vorhandene Anführungszeichen abschäle.
Grüße
Biber
P.S. Frittenbudendeutsch hab ich vorhin noch vergessen bei den Sprachen.
mit der Zeile 16 hast du natürlich Recht... wie geschrieben, ich hab auch nur grob durchgeharkt und nicht getestet.
Ändere ich auch NICHT in der Skizze oben.
Und was bedeutet die Tilde in der Schleife?
Ja, diese Antwort ist ein bisschen versteckt in den "Befehl /?"-Hilfen am CMD-Prompt.
In der Hilfe zu CALL ("call /?") steht es beispielsweise:
Call /?
....
Die Ersetzung von Batchparametern (%n) wurde erweitert. Sie können
jetzt folgende Syntax benutzen:
%~1 - Expandiert %1 und entfernt umschließende
Anführungszeichen (").
....
Mehr Geheimnis verbirgt sich nicht dahinter...
... aber wenn man/frau es nicht zufällig irgendwo in einem Batch gelesen hat, sucht/kennt es auch niemand.
Hier im konkreten Schnipsel ist es eher überflüssig, aber es kommt bei mir auch automatisch,
wenn ich explizit einen Parameter in Anführungszeichen setze (wie in der FOR-Anweisungs-Klammer),
dass ich dann evtl. ohnehin vorhandene Anführungszeichen abschäle.
Grüße
Biber
P.S. Frittenbudendeutsch hab ich vorhin noch vergessen bei den Sprachen.
Moin kkboy94,
Probier es einfach aus am CMD-Prompt, was wann passiert.
Grüße
Biber
Zitat von @kkboy94:
Wenn ich das also richtig verstanden habe, kann man parameter auch ohne Anführungszeichen machen und bracuht dann auch keine Tilde?
Äh... ja. Kann sein. Dazu müsste ich jetzt die Frage verstehen...Wenn ich das also richtig verstanden habe, kann man parameter auch ohne Anführungszeichen machen und bracuht dann auch keine Tilde?
Probier es einfach aus am CMD-Prompt, was wann passiert.
>for /f "tokens=1, 3" %i in ("eins zwei "drei" undVier") do @echo %i %~i "%~i" %j %~j "%~j"
eins eins "eins" "drei" drei "drei"
Ich will auch Frittenbudendeutsch können
Ist nicht so schwierig wie der Oldenburger-Platt-Compiler, den ich mal gebaut habe.Grüße
Biber
Der erste Teilsatz schließt eigentlich den Teil nach dem Komma aus
Die eine Zeile knackst du....
Grüße
Biber
Die eine Zeile knackst du....
Grüße
Biber
Moin kkboy94,
sagen wir so: wenn du in der Ausgabe von "IPConfig /all" alle Zeilen mit dem zugehörigen Netzwerkadapter identifizieren kannst, dann ja.
Im Moment fieselst du ja alle IP-Zeilen raus, weil du die Zeilen auf den String "IP-Ad" prüfst.
Also beim originalen Windows "IP-Address<blah>" findest , beim deutschen Windows entsprechend "IP-Adresse<bla>".
Und durch "Findstr /n" kommt die "erste" IP-Adresse noch eine "1:" vorweg, die zweite eine "2." etc.
Könntest du natürlich genauso mit den Zeilen machen, die die Netzwerkadapterinformation enthalten und dann zusammenmischen.
Mach mal einfach einen Vorschlag, was deine "Netzwerkadapter"-Zeilen gemeinsam bzw. als Identifikationsmerkmal haben.
Bei meinen Rechnern steht das auf dünnem Eis ...mit Glück steht das Wort "Adapter" in der Zeile und ebenso mit Glück hat die Zeile nur einen ":" (im Gegensatz zu allen anderen, die haben zwei Token bei "Delims=:".
Grüße
Biber
sagen wir so: wenn du in der Ausgabe von "IPConfig /all" alle Zeilen mit dem zugehörigen Netzwerkadapter identifizieren kannst, dann ja.
Im Moment fieselst du ja alle IP-Zeilen raus, weil du die Zeilen auf den String "IP-Ad" prüfst.
Also beim originalen Windows "IP-Address<blah>" findest , beim deutschen Windows entsprechend "IP-Adresse<bla>".
Und durch "Findstr /n" kommt die "erste" IP-Adresse noch eine "1:" vorweg, die zweite eine "2." etc.
Könntest du natürlich genauso mit den Zeilen machen, die die Netzwerkadapterinformation enthalten und dann zusammenmischen.
Mach mal einfach einen Vorschlag, was deine "Netzwerkadapter"-Zeilen gemeinsam bzw. als Identifikationsmerkmal haben.
Bei meinen Rechnern steht das auf dünnem Eis ...mit Glück steht das Wort "Adapter" in der Zeile und ebenso mit Glück hat die Zeile nur einen ":" (im Gegensatz zu allen anderen, die haben zwei Token bei "Delims=:".
Grüße
Biber
Moin kkboy94,
Aber ich habe mich eigentlich bemüht, entsprechende Tipps & Strategien so in meinem Kommentar zu verstecken, dass sie auch gefunden werden könnten.
Obwohl... manchmal verschätz ich mich bei so etwas.
Ich hab beispielsweise im Jahr 1993 zu Ostern Schokoladen-Eier versteckt, die werden vielleicht erst von künftigen Generationen gefunden.
Bitte lies noch mal meinen Kommentar.
Wenn du es bis morgen nicht knackst, dann turn ich es vor.
Grüße
Biber
Wiw filter ich denn in dem Beispiel den Adapter raus?
Ich weiss, es ist wieder ziemlich warm heute.Aber ich habe mich eigentlich bemüht, entsprechende Tipps & Strategien so in meinem Kommentar zu verstecken, dass sie auch gefunden werden könnten.
Obwohl... manchmal verschätz ich mich bei so etwas.
Ich hab beispielsweise im Jahr 1993 zu Ostern Schokoladen-Eier versteckt, die werden vielleicht erst von künftigen Generationen gefunden.
Bitte lies noch mal meinen Kommentar.
Wenn du es bis morgen nicht knackst, dann turn ich es vor.
Grüße
Biber