Top-Themen

Aktuelle Themen (A bis Z)

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 Wörter in Echo verschwinden - werden gedreht

Mitglied: Snowman25

Snowman25 (Level 3) - Jetzt verbinden

13.04.2010 um 12:31 Uhr, 4650 Aufrufe, 8 Kommentare

Seit wann können Wörter in Echos einfach verschwinden?

Hallo liebe Mit-Administratoren\Administratorinnen,

Irgendetwas mache ich mit meinen Echos falsch.
Siehe hier:
01.
@Echo off
02.
ipconfig|findstr /I gateway>%TEMP%\temp.ip
03.
for /F "tokens=2 delims=:" %%P in (%TEMP%\temp.ip) do (
04.
	Echo %%P>%TEMP%\alpha.ip
05.
	for /F "tokens=4 delims=." %%I in (%TEMP%\alpha.ip) do (
06.
		if %%I LEQ 2 (
07.
			if x%%I==x1 (
08.
				netsh -f noproxy.conf
09.
				Echo noproxy
10.
			)
11.
			if x%%I==x2 (
12.
				netsh -f norm.conf
13.
				echo norm
14.
			)
15.
			Echo Gateway 172.18.235.%%I wurde angelegt
16.
			Echo Tastendruck zum beenden...
17.
			pause>nul
18.
		) else (
19.
			Echo Falsches Gateway! gefunden: %%P
20.
			Echo Tastendruck zum beenden...
21.
			pause>nul
22.
		)
23.
	)
24.
)
25.
rem del %TEMP%\temp.ip
26.
rem del %TEMP%\alpha.ip
Prompt:
U:\batch\netchange>change.bat
 wurde angelegt235.1
Tastendruck zum beenden...
Es sind keine Steuerzeichen oder sonstiges im Text.
Wo liegt mein Fehler?

Gruß
Snow
Mitglied: bastla
13.04.2010 um 12:36 Uhr
Hallo Snowman!

Ich würde ja darauf tippen, dass unmittelbar vor dem Umleitungszeichen zB die Ziffer 0 steht - dann wird diese als Angabe des Kanals interpretiert ...

Abhilfe schafft das Voranstellen der Umleitung, also etwa
>>%TEMP%\alpha.ip Echo %%P
(oder auch ein Leerzeichen vor dem ">", was man/frau aber öfters vermeiden möchte).

Grüße
bastla
Bitte warten ..
Mitglied: Snowman25
13.04.2010 um 12:50 Uhr
Zitat von bastla:
Hallo Snowman!

Ich würde ja darauf tippen, dass unmittelbar vor dem Umleitungszeichen zB die Ziffer 0 steht - dann wird diese als Angabe des
Kanals interpretiert ...

Hab mir jetzt die Ausgabe mit Echo on in ein File speichern lassen...
Alle Umleitungen finden auf Kanal 1 statt. Ausserdem würde der Echo dadurch auch nicht so verzogen werden.
Ich bin ratlos...

Gruß
Snow
Bitte warten ..
Mitglied: LotPings
13.04.2010 um 15:08 Uhr
Hallo Snow,

wenn ich das richtig sehe, schreibst du mit der %%P Schleife in eine temp Datei
und mit der inneren %%I Schleife liest du gleichzeitig aus derselben?

Über derartige Seiteneffekte würde ich mich dann aber nicht wundern....

Außerdem sind die expliziten Temp Dateien überflüssig, probier dies mal:
01.
@Echo off
02.
for /F "tokens=2 delims=:" %%P in ('ipconfig^|findstr /I gateway') do (
03.
  Echo.%%P
04.
  for /F "tokens=4 delims=." %%I in ("%%P") do (
05.
    echo.%%I
06.
    if %%I LEQ 2 (
07.
      if x%%I==x1 (
08.
        netsh -f noproxy.conf
09.
        Echo noproxy
10.
      )
11.
      if x%%I==x2 (
12.
        netsh -f norm.conf
13.
        echo norm
14.
      )
15.
      Echo Gateway 172.18.235.%%I wurde angelegt
16.
      Echo Tastendruck zum beenden...
17.
      pause>nul
18.
    ) else (
19.
      Echo Falsches Gateway! gefunden: %%P
20.
      Echo Tastendruck zum beenden...
21.
      pause>nul
22.
    )
23.
  )
24.
)
25.
rem del %TEMP%\temp.ip
26.
rem del %TEMP%\alpha.ip
Gruß
LotPings

Edit: superfluides % entfernt
Bitte warten ..
Mitglied: Snowman25
13.04.2010 um 16:21 Uhr
Hallo LotPings,

in zeile 4 ist zwar noch ein % zuviel (in ("%%P%") do statt in ("%%P") do) aber ansonsten funktioniert diese Version einwandfrei. Trotzdem würde ich jetzt gerne wissen, warum denn die mit den temporären Dateien NICHT funkioniert...

Gruß
Snow
Bitte warten ..
Mitglied: LotPings
13.04.2010 um 16:38 Uhr
Zitat von Snowman25:
Trotzdem würde ich jetzt gerne wissen, warum denn die mit den temporären Dateien NICHT funkioniert...
Naja ich hab zwar die CMD.exe nicht programmiert,
aber ich vemute mal das für manche internen Prozesse wie eben auch For-Schleifen eine sekundärer Cmd.exe geöffnet wird und das zeitliche Verhalten hier nicht exakt spezifiert ist. Während der eine Prozess mit der Ausgabe in die temp-Datei noch beschäftigt ist, liest der andere schon daraus, und hier kommt noch eine Besonderheit dazu: Ipconfig erzeugt als Zeilenwechsel die eher ungewöhnliche Komination 0D 0D 0A = CR CR LF und ich weiß aus Erfahrung das es da öfter hapert.

Außerdem ist es ohne Temp Datei deutlich eleganter/effizienter.

Gruß
LotPings
Bitte warten ..
Mitglied: Snowman25
13.04.2010 um 16:53 Uhr
Zitat von LotPings:
Zitat von Snowman25:
Trotzdem würde ich jetzt gerne wissen, warum denn die mit den temporären Dateien NICHT funkioniert...
Naja ich hab zwar die CMD.exe nicht programmiert,
aber ich vemute mal das für manche internen Prozesse wie eben auch For-Schleifen eine sekundärer Cmd.exe geöffnet
wird und das zeitliche Verhalten hier nicht exakt spezifiert ist. Während der eine Prozess mit der Ausgabe in die temp-Datei
noch beschäftigt ist, liest der andere schon daraus.

Die Dateien passen alle. Auch während der Ausführung.

und hier kommt noch eine Besonderheit dazu: Ipconfig erzeugt als Zeilenwechsel die eher ungewöhnliche Kombination
0D 0D 0A = CR CR LF und ich weiß aus Erfahrung das es da öfter hapert.

Das ist kein Argument, da deine Version dann genausowenig funktionieren dürfte.

Außerdem ist es ohne Temp Datei deutlich eleganter/effizienter.

Effizienz in zusammenhang mit netsh? Das braucht allein für 5 zeilen code (2 davon pushd und popd) schon fast 'ne halbe minute.

Gruß
Snow

EDIT:
Grade bemerkt, dass in %I i-wie ein Zeilenumbruch hineinkommt, der auch als solcher interpretiert wird. Sehr eigenartig, aber jetzt auch egal.
Bitte warten ..
Mitglied: 76109
14.04.2010 um 10:27 Uhr
Hallo Snowman!

Also LotPings hat mit dem Hinweis auf Seiteneffekte beim schreiben/lesen schon Recht.

Wenn man bedenkt, das Festplattenzugriffe im millisekunden- und Codeausführung im nanosekundenbereich abläuft ist das nicht verwunderlich. Hier besteht - außer z.B. mit dem Befehl PAUSE - keine Möglichkeit, dem Command zu sagen, warte bis der Datei-Schreibvorgang abgeschlossen ist.

Wenn per Command ein anderes Programm z.B. Findstr aufgerufen wird, dann wartet Command bis das andere Programm beendet ist (Wait Exit). Bei Lese/Schreibvorgängen auf Festplatte läuft das aber anders ab. Hier wird der Echo-Text in einen Buffer geschrieben und ein Interrupt für den StdOut-Treiber ausgelöst (StdOut-File-Handle 1). Der StdOut-Treiber setzt den Schreibvorgang über Ports an den DMA-Controller ab, der mehrere Kanäle (Ports) für unterschiedliche Aufgaben benutzt. D.h. nachdem der StdOut-Treiber den Schreibvorgang an den DMA-Controller abgesetzt hat, kehrt die Codeausführung zum Command zurück und der Vorgang ist für Ihn erledigt und er hat keine Kenntnis darüber, zu welchem Zeitunkt die Daten auf die Festplatte geschrieben werden. Das obliegt allein dem DMA-Controller, der diese Aufgabe eigenständig im Hintergrund ausführt. Ein ähnliches Spiel läuft beim Lesevorgang über den StdIn-Treiber und einen anderen Kanal des DMA-Controllers ab. Hier wird allerdings logischerweise gewartet bis der StdIn-Treiber (Std-File-Handle 0) die Daten in den Buffer geschrieben hat und die Codeausführung kehrt erst dann zum Command zurück.

So in etwa muss man sich den Ablauf vorstellen.

Gruß Dieter
Bitte warten ..
Mitglied: Snowman25
14.04.2010 um 12:16 Uhr
Hallo didi,

wie schon gesagt: Der Inhalt der Dateien zur Ausführung ist weder korrupt noch unvollständig oder sonstiges.
Wenn ich ein entsprechendes Echo in die erste Zeile der Schleife hänge, muss ich ja genau den Inhalt bekommen, der ansonsten an dieser Stelle verarbeitet werden würde. Und dieser stimmt nun mal. Egal ob die Datei davor vorhanden war oder nicht.

Hauptsache ist, dass das Skript jetzt seinen Zweck erfüllt (auch wenn netsh ein wenig schneller sein könnte ) und so auch funktioniert.
Hatte zwar noch 'nen kleinen Denkfehler drin (siehe Zeile 15) aber der ist inzwischen auch ausradiert.

Gruß
Snow
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Echo test.txt
gelöst Frage von CerauxBatch & Shell2 Kommentare

echo %test% >> test.txt Wie macht man es so, dass beim speichern kein Leerzeichen hinter dem Wort ist: Beispiel: ...

Router & Routing
Amazon Echo
Frage von gruener.pumaRouter & Routing22 Kommentare

Hi, Ich habe mal folgende technische Frage, die ich nirgendwo beantwortet finde. Wenn ich uebers Internet (nicht im Wlan) ...

Batch & Shell
Echo date - Variable
gelöst Frage von CerauxBatch & Shell1 Kommentar

Hallo, ich versuche eine Variable in ein Textdokument auszugeben, jedoch will das nicht wirklich funktionieren: Batch: So soll die ...

Batch & Shell

Textdatei (.txt) Wort für Wort auslesen per batch (Spaltenweise)

Frage von pdiddoBatch & Shell1 Kommentar

Hi, ich habe eine Textdatei (.txt). Diese hat mehrere Zeilen. Ich möchte diese gerne Spalte für Spalte auslesen, sodass ...

Neue Wissensbeiträge
Rechtliche Fragen
Unitymedia siegt vor dem BGH
Information von transocean vor 1 TagRechtliche Fragen5 Kommentare

Moin, lt. einem aktuellen Urteil darf UM Mietrouter seiner Kunden weiterhin in Hotspots verwandeln. Nachlesen kann man das hier. ...

Router & Routing
Der "768k-Day" kommt
Information von LordGurke vor 2 TagenRouter & Routing2 Kommentare

Für Leute, die Router mit BGP-Fulltable betreiben vielleicht ein interessanter Hinweis: Die IPv4-Fulltable erreicht voraussichtlich innerhalb der nächsten 2-3 ...

Debian

Partition angeblich voll, dabei aber noch nicht mal zur Hälfte belegt

Anleitung von diemilz vor 2 TagenDebian8 Kommentare

Hallo zusammen, ich habe ein kleines Problem: Ich habe auf einem physischen Debian Linux Server als ZoneMinder-Server (HP ProLiant ...

Windows 7
Updategängelung auf Windows 10, die zweite
Information von Penny.Cilin vor 6 TagenWindows 74 Kommentare

Hallo, da Windows 7 im kommenden Jahr nicht mehr supportet wird, werden Nutzer von Window 7 home premium wieder ...

Heiß diskutierte Inhalte
HTML
Bild hochladen mit html auf die Webseite
gelöst Frage von WorldoftheitHTML63 Kommentare

Will eine Seite entwickeln im Internet aber Das Bild wird nicht angezeigt woran kann das liegen? Wäre für jede ...

Vmware
Terminalserver VM - Videos ruckeln
Frage von easyriderVmware29 Kommentare

Hallo zusammen, wir haben einen (free) ESXi 5.5 auf einem HP DL 380 G8 im Einsatz. Darauf läuft, unter ...

Windows Server
Ordner auf Filserver gelöscht
gelöst Frage von OrkansonWindows Server23 Kommentare

Hallo, haben einen Win2016 Server als Fileserver. Kann ich irgendwie nachvollziehen anhand der Logfiles wer Ordner löscht? Gruß Marcel

Batch & Shell
Schleife mit Exist
gelöst Frage von casi4711Batch & Shell18 Kommentare

Hallo an alles fleißigen Scripter, ein Script soll eine Range von IPs abfragen und checken, ob ein bestimmtes Verzeichnis ...