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

Eingabe in Datei umleiten lassen (Umweg über Prozedur)

Frage Entwicklung Batch & Shell

Mitglied: -heny-

-heny- (Level 1) - Jetzt verbinden

10.04.2008, aktualisiert 22:04 Uhr, 7825 Aufrufe, 7 Kommentare

Hallo,

folgender Codeschnipsel sei gegeben:

01.
@echo off 
02.
set /p "TestVariable=Geben Sie einen Wert ein: " 
03.
call :TestProzedur %TestVariable% 
04.
goto :eof 
05.
 
06.
:TestProzedur 
07.
echo %*>> test.txt 
08.
goto :eof 
09.
pause
Prinzipiell soll das Skript eine Eingabe in eine Textdatei umleiten. Das funktioniert auch soweit problemlos. Probleme treten nur auf, wenn die Eingabe alphanumerisch und nur einstellig ist, z.B. "1" oder "a" oder "!". Andere, längere Eingaben wie "11" oder "1test" funktionieren perfekt.

Wenn die Eingabe nun nur aus einem alphanumerischen Zeichen besteht, wird folgender Inhalt in die Textdatei geschrieben:

01.
ECHO ist ausgeschaltet (OFF).
Das kann ja nur daher kommen, dass die Variable nicht existiert. Die Frage ist jetzt nur, warum dieses Problem auftritt. Dass ich eine Abfrage nach der Länge und dem jeweiligen Wert machen kann, ist mir klar, aber ich würde gerne die Problematik an sich begreifen.

Gruß,
heny

PS: Die Lösung via Prozeduraufruf (Sprungmarke) ist gewollt und soll in jedem Fall bestehen bleiben. Sie scheint mit dem fehlerhaften Verhalten auch nichts zu tun zu haben, soweit ich das getestet habe.
Mitglied: gemini
10.04.2008 um 19:02 Uhr
Hallo -heny-,

versuch's mal damit
01.
@echo off 
02.
set /p "TestVariable=Geben Sie einen Wert ein: " 
03.
call :TestProzedur %TestVariable% 
04.
goto :eof 
05.
 
06.
:TestProzedur 
07.
echo %* >> test.txt 
08.
goto :eof 
09.
pause
Hat bei mir keine Fehler erzeugt.

Gruß,
gemini
Bitte warten ..
Mitglied: bastla
10.04.2008 um 19:08 Uhr
Hallo -heny-!

Für einen einzelnen Buchstaben kann ich das Problem nicht nachvollziehen ...

Dass es mit "!" nicht klappt, müsste an einer "DelayedExpansion" liegen, und einstellige Zahlen werden als Kanalangaben interpretiert (eine resultierende Ausgabe zB der Art
01.
2>> test.txt
schreibt natürlich keinen Inhalt in die Datei, da ja kein Fehler aufgetreten ist und daher keine Meldung über STDERROR kommt). Lösung dafür:
01.
(echo %*)>>test.txt
Grüße
bastla

[Edit] Nachtrag: Um Dich auch gegen die unerfreuliche Ausgabe von "ECHO ist ausgeschaltet (OFF)." ein wenig abzusichern (ergibt dann eine Leerzeile):
01.
(echo\%*)>>test.txt
[/Edit]
Bitte warten ..
Mitglied: bastla
10.04.2008 um 19:16 Uhr
@gemini
Wenn das an das Ende der Zeile geschriebene Leerzeichen nicht stört, ist das die bessere Lösung.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
10.04.2008 um 20:29 Uhr
...und noch der allerletzte i-Tüpfelchen:

Wie Du leicht nachvollziehen kannst am CMD-Prompt, haben die Ziffern bei Umleitungen auch spezielle Bedeutung.
Eine 1 ausgeben...
echo 1
1
Ein Eins explizieht unleiten auf den Monitor oder eine Datei...[works as designed]
echo 1>con
ECHO ist eingeschaltet (ON).

So klappt auf dieser Eventualfall mit "echo (1,2,3,4)>irgendeinDevice":
01.
 >>con echo 1 
02.
1
Du kannst also auch schreiben:
01.
... 
02.
:TestProzedur 
03.
>>test.txt echo\%* 
04.
goto :eof
Grüße
Biber
Bitte warten ..
Mitglied: -heny-
10.04.2008 um 20:52 Uhr
Hallo,

danke. Die von euch beschriebenen Lösungen funktionieren beide. Welche ist denn die "bessere" bzw. die, welche man benutzen sollte?

Und von STDERR, STDOUT usw. habe ich absolut keinen Plan, bzw. von Umleitungen allgemein. Ich wusste bis jetzt halt nur, dass ich mit ">" & ">>" bzw. "<" & "<<" eine Ausgabe in eine Textdatei umleiten kann.

Gibt es zu dem gesamten Thema ein Tutorial o.ä.?

Gruß,
heny

[Edit]
Noch etwas, würdet ihr bei einer gewünschten Ausgabeumleitung in eine Textdatei immer z.B. die Klammerung verwenden?
Bsp.: (echo.)>> datei.txt
[/Edit]
Bitte warten ..
Mitglied: bastla
10.04.2008 um 21:42 Uhr
Hallo -heny-!

STDOUT = Standardausgabekanal (Kanal 1) -> Bildschirm (Konsole) = Gerät CON
STDERR = Ausgabekanal für Fehlermeldungen (Kanal 2) -> ebenfalls Bildschirm

... eine Ausgabe in eine Textdatei umleiten kann.
... oder auch zB nach NUL, um sie im "Nichts" verschwinden zu lassen.
Zu Deiner letzten Frage: Klammern sind vor allem dann sinnvoll, wenn Du mehrere Ausgaben hintereinander tätigst, zB
01.
02.
    echo Ueberschrift 
03.
    echo ============ 
04.
    echo\ 
05.
    iecho\ 
06.
)>Liste.txt
Im von Dir angesprochenen Fall würde ich weder Klammern, noch den Punkt (damit gibt's neuerdings Probleme) verwenden, sondern einfach
01.
echo\>>datei.txt
schreiben.

Grüße
bastla
Bitte warten ..
Mitglied: Biber
10.04.2008 um 22:04 Uhr
Moin -heny-,

würdet ihr bei einer gewünschten Ausgabeumleitung in eine Textdatei immer z.B. die Klammerung verwenden

Hmmmjein...eher nein.
Es macht den Code nicht lesbarer (falls man/frau doch mal mehr als Zeile schreibt).

Sinnvoll ist die Echo-Klammerung bei solchen Dirty-Onelinern (auch vom CMD-Prompt), in denen mehr als ein Befehl pro Zeile auftaucht.
Beispiel:
echo Fehler & goto :eof

Für jemanden, der den Code warten muss und auch für die CMD.exe selbst ist dieses eindeutiger:
(echo Fehler) & goto :eof

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch-Datei mit anderem Benutzer laufen lassen und dann wieder sofort abmelden (4)

Frage von Zunaras zum Thema Batch & Shell ...

Webentwicklung
HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Informationsdienste
gelöst Aktuelle Firefox MSI Datei!? (8)

Frage von Hendrik2586 zum Thema Informationsdienste ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...