Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch so umschreiben, dass alles in eine Datei passt

Frage Entwicklung Batch & Shell

Mitglied: kkboy94

kkboy94 (Level 1) - Jetzt verbinden

01.07.2010 um 19:10 Uhr, 3868 Aufrufe, 16 Kommentare

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:
@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%
Ich hoffe ihr könnt mir helfen

MfG Karsten
Mitglied: Biber
01.07.2010 um 19:41 Uhr
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):
> @(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
Ausgabe wäre sinngemäß:
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
Bitte warten ..
Mitglied: kkboy94
01.07.2010 um 19:49 Uhr
Entschuldigung für das Nicht-kommentieren, aber um ehrlich zu sein:
Wenn ich das wirklich alles selbst gemacht hätte, wüsste ich ja, was wie und warum funktioniert. De facto also ---> Ich habs von ner anderen Internetseite, auf der das auch genauso wenig kommentiert ist. Bei Wunsch kann ich die ja auch mal posten.



Achja, hätt ich fast vergessen. DANKE funktioniert super. Muss ich nur noch in die Restbatch einbauen.

[OT]
Welche Sprachen kannst du eigentlich alle, Biber?
[/OT]

MfG Karsten
Bitte warten ..
Mitglied: Biber
01.07.2010 um 20:27 Uhr
Moin kkboy94,

Zitat von kkboy94:
Entschuldigung für das Nicht-kommentieren, ....
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" auch
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.

[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
Bitte warten ..
Mitglied: kkboy94
01.07.2010 um 20:40 Uhr
> Bei Wunsch kann ich die ja auch mal posten.
Ja nee...eilt nicht...
Ist das jetzt ein JA?

> Mal noch ne kurze Frage: Wie kommst du auf "findstr /n $" in der Schleife?
"Findstr.exe" akzeptiert im Gegensatz zu "find.exe" auch
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.
Ahh gut Danke. ich hatte in der zwischenzeit auch mal die cmd-Hilfe bemüht und habe da etwas ähnliches gefunden und erfolgreich.............nicht verstanden, aber jetzt hab ichs verstanden.

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 an



Nun ja......
jetzt habe ich mir TimoBeil's letzte Anleitung zu Gemüte geführt bevor ich dann deinen Teil auch noch eingesetzt hab.
das erste mal hats funktioniert, aber dann nicht mehr. Und irgendwie habe ich das Gefühl, durch das Einsetzen stimmt da einiges nicht mehr.
Könntest du mir da vielleicht noch einmal helfen?

01.
@echo off & setlocal 
02.
del %log% 2>nul 
03.
set log=netz.txt 
04.
rem Es wird jede IP für jedes aktive Netzwerkadapter herausgefunden und auf dem Bildschirm angezeigt 
05.
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 
06.
rem hier wird die oben herausgefundene IP für den weiter unten beschriebenen Vorgang "vorbereitet" 
07.
for /f "tokens=1,2,3 delims=." %%a in ("%%j") do set ipa=%%a.%%b.%%c. 
08.
echo %ipa% 
09.
rem Nun sollen alle Möglichen Ip's eines C-Klasse-Netzwerks angepingt werden und das Ergebnis in ein log geschrieben werden 
10.
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% 
11.
echo. 
12.
pause
Bitte warten ..
Mitglied: Biber
01.07.2010 um 21:23 Uhr
Moin kkboy94,

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.

01.
@echo off & setlocal 
02.
set "log=netz.txt" & :: Böse Falle...  
03.
:: --> wenn du den Batch aus Verzeichnis "D:\temp" heraus aufrufst--> Logfile "D:\Temp\netz.txt 
04.
:: --> wenn du den Batch aus Verzeichnis "C:\....\Desktop" heraus aufrufst--> Logfile "C:\...Desktop\netz.txt 
05.
 
06.
del %log% 2>nul 
07.
 
08.
rem Es wird jede IP für jedes aktive Netzwerkadapter herausgefunden und auf dem Bildschirm angezeigt 
09.
echo Deine IP-Adressen sind  
10.
for /f "tokens=1,3 delims=:" %%i in ('ipconfig/all^|findstr "IP-Ad"^|findstr /n $') do ( 
11.
       echo. IP%%i=%%j 
12.
       rem hier wird die oben herausgefundene IP für den weiter unten beschriebenen Vorgang "vorbereitet" 
13.
      Call :TMosPart %%j 
14.
)     
15.
 
16.
:goto :eof  
17.
-------> Ende des ganzen Batches 
18.
      ### Raum für Notizen ### 
19.
       
20.
:TMosPart 
21.
for /f "tokens=1,2,3 delims=." %%a in ("%~1") do set ipa=%%a.%%b.%%c. 
22.
echo %ipa% 
23.
 
24.
::-------> ab hier hab ich nicht mehr geschaut, was da gemacht wird, nur die Zeilenumbrüche  reinformatiert 
25.
rem Nun sollen alle Möglichen Ip's eines C-Klasse-Netzwerks angepingt werden und das Ergebnis in ein log geschrieben werden 
26.
FOR /L %%p IN (1,1,254) do ( 
27.
     title %ipa%%%p  
28.
     for /f "tokens=2 delims= " %%A in ( 
29.
         'ping -a %ipa%%%p -n 1 ^| FIND "[%ipa%%%p]"' 
30.
         ) DO ECHO.%%A;%ipa%%%p>>%log% 
31.
  )        
32.
echo. 
33.
 
34.
goto :eof ::Ende von TMosPart 
35.
 
36.
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 an
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.
Bitte warten ..
Mitglied: kkboy94
01.07.2010 um 21:39 Uhr
Danke jetzt funktionierts einwandfrei.
Einen kleinen Fehler hab ich noch entdeckt in Zeile 16.
Müsste doch eigentlichso sein:
goto :eof 
Und was bedeutet die Tilde in der Schleife?
Hat das nicht normalerweise was mit dem Überspringen von Zeichen oder sowas zu tun? (Offset)
for /f "tokens=1,2,3 delims=." %%a in ("%~1") do set ipa=%%a.%%b.%%c.  
22. 
echo %ipa% 
MfG Karsten
Bitte warten ..
Mitglied: Biber
01.07.2010 um 21:52 Uhr
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.
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.
Bitte warten ..
Mitglied: kkboy94
01.07.2010 um 21:58 Uhr
Wenn ich das also richtig verstanden habe, kann man parameter auch ohne Anführungszeichen machen und bracuht dann auch keine Tilde?


Ich will auch Frittenbudendeutsch können
Bitte warten ..
Mitglied: Biber
01.07.2010 um 22:09 Uhr
Moin kkboy94,

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...

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
Bitte warten ..
Mitglied: kkboy94
01.07.2010 um 22:17 Uhr
Gut habs soweit verstanden, aber wo bleibt die 4 und die 2?
Bitte warten ..
Mitglied: Biber
01.07.2010 um 22:20 Uhr
Zitat von kkboy94:
Gut habs soweit verstanden, aber wo bleibt die 4 und die 2?
Der erste Teilsatz schließt eigentlich den Teil nach dem Komma aus

Die eine Zeile knackst du....

Grüße
Biber
Bitte warten ..
Mitglied: kkboy94
02.07.2010 um 22:04 Uhr
Yippie ich habs verstanden.

So nochne Frage dran:

ist es möglich in diesem teil , die Sache so umzuschreiben, dass %%i keine Zahlen angibt sondern den dazugehörigen netzwerkadapter?
01.
for /f "tokens=1,3 delims=:" %%i in ('ipconfig/all^|findstr "IP-Ad"^|findstr /n $') do (  
02.
11. 
03.
       echo. IP%%i=%%j
MfG Karsten
Bitte warten ..
Mitglied: Biber
04.07.2010 um 13:05 Uhr
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
Bitte warten ..
Mitglied: kkboy94
04.07.2010 um 13:45 Uhr
Moin zurück

Also:
Bei mir steht dann immer der Adapter, und dann welche Verbindung das ist. Bsp.:

Ethernetadapter LAN-Verbindung:

Ip-Adresse
Standardgateway
DNS-Server
usw...


Wiw filter ich denn in dem Beispiel den Adapter raus?

Grüße zurück
Bitte warten ..
Mitglied: Biber
04.07.2010 um 14:21 Uhr
Moin kkboy94,

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
Bitte warten ..
Mitglied: kkboy94
04.07.2010 um 14:42 Uhr
Tada-->
Demo am CMD-Prompt
01.
>for /f "tokens=1 delims=:" %a in ('ipconfig/all^|findstr "adap"') do @echo %a 
02.
Ethernetadapter LAN-Verbindung
So nach 3 Min hatte ichs. Durch diese Forum werd ich immer besser

Danke für den HiddenHint ^^

EDIT:
Jetzt wollte ich das in die vorhandene Batch einbauen. Das sah dann so aus:
01.
echo Deine IP-Adressen sind  
02.
for /f "tokens=1,3 delims=:" %%i in ('ipconfig/all^|findstr "IP-Ad"^|(for /f "tokens=1 delims=:" %%a in ('ipconfig/all^|findstr "adap"') do echo %%a)') do ( 
03.
      echo. IP%%i=%%j 
04.
       rem hier wird die oben herausgefundene IP für den weiter unten beschriebenen Vorgang "vorbereitet" 
05.
      Call :test %%j 
06.
) 
Mir wird dann aber folgendes gesagt:
Deine IP-Adressen sind
"|" ist syntaktisch an dieser Stelle nicht verarbeitbar.
IP%i=%j
Jetzt weiß ich aber nicht was ich da falsch gemacht habe
MfG Karsten
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell oder Batch-Task: Kopiere Datei x mal und benenne diese um (2)

Frage von Lorderich zum Thema Batch & Shell ...

Batch & Shell
gelöst Per Batch nur neueste Datei mit bestimmten Dateianfang kopieren (3)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
Batch das eine Datei (.tiff) an einen Netzwerkdrucker sendet und druckt (3)

Frage von klouisbrother zum Thema Batch & Shell ...

VB for Applications
VBS oder Batch um eine Datei in Unterordner zu verschieben (1)

Frage von MrRoyal zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...