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

Wörter in Echo verschwinden - werden gedreht

Frage Entwicklung Batch & Shell

Mitglied: Snowman25

Snowman25 (Level 3) - Jetzt verbinden

13.04.2010 um 12:31 Uhr, 4542 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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Echo in Batch schreibt vorab eine 1 (1)

Frage von chappy72 zum Thema Batch & Shell ...

Sonstige Systeme
Amazons Echo im Test: Beim Dankesagen ertappt (4)

Link von Frank zum Thema Sonstige Systeme ...

Windows Server
gelöst Terminalserver 2012R2 es verschwinden ausgestelle RDS Lizenzen (6)

Frage von wolfble zum Thema Windows Server ...

Batch & Shell
gelöst CMD Echo in Fett, Kursiv oder unterstrichen ausgeben (8)

Frage von Luuke257 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...