phlegma
Goto Top

echo Umleitungsfehler unterdrücken

moin ich melde mich ma wieder zurück...
ich denk das problem wird sofort am titel dieses topics klar...

hi alle zusammen...

ich hab folgendes problem:
ich erstelle einen ordner, allerdings weiß ich noch nicht ob ich dafür auch ddie nötigen nutzerrechte habe, und ob der ordner nicht schon vorhanden ist.

fall: ordner noch nicht vorhanden und keine schreibrechte

if not exist "%phlegdir%" (md "%phlegdir%"  
            echo Hey du hast den Phlegma Ordner gefunden^^^^ >"%phlegdir%\README.txt")  

nun bekomme ich 2 fehlernmeldungen:
"Zugriff verweigert" und "Das System kann den angegebenen Pfad nicht finden."
die zweite Meldung stört mich, da ich sei nicht abstellen kann.
probiert habe ich schon 2>nul, if not %errorlevel%==1, 3>nul und 4>nul ...

auch google konnte mir leider nicht helfen deshalb stelle ich diese frage ins forum.
postet bitte was euch dazu einfällt.

gruß, Ph

Content-ID: 60573

Url: https://administrator.de/contentid/60573

Ausgedruckt am: 25.11.2024 um 18:11 Uhr

Mitchell
Mitchell 05.06.2007 um 08:22:55 Uhr
Goto Top
Hi Phlegma,

um deinen Code als solchen zu Kennzeichnen, nutze bitte den Code-Tag, steht in den im Forum verwendeten Formatierungen in den Beiträgen.

fall: ordner noch nicht vorhanden und keine
schreibrechte

Du willst einen Ordner ohne Schreibrechte anlegen und wunderst dich dann über die Fehlermeldung? *g*

Mfg

Mitchell
Biber
Biber 05.06.2007 um 08:29:06 Uhr
Goto Top
Moin Phlegma,

WTF is "Google"?
Ich würde es so lösen:
@if not exist "%phlegdir%" md "%phlegdir%" 2>nul  
@if exist "%phlegdir%" echo Hey du hast den Phlegma Ordner gefunden >"%phlegdir%\README.txt"  

...zuerst, falls das Verzeichnis nicht existiert, versuchen es anzulegen
... danach, falls es existiert, etws hineinschreiben.

Den Verbleibenden Fall (Verzeichnis existiert nicht UND kann auch nicht angelegt werden, kannst Du ggf. auch noch abfangen:
@if not exist "%phlegdir%" md "%phlegdir%" 2>nul || @echo %phlegdir% konnte nicht angelegt werden!  
... aber Du kannst (aus nachvollziehbaren Gründen) diese Meldung nicht in eine Logdatei nach %phlegDir% schreiben.

Gruss
Biber
Phlegma
Phlegma 05.06.2007 um 20:41:51 Uhr
Goto Top
oO...
ihr habt mich beide nicht richtig verstanden vllt zuwenig infos...

achja und zu: wtf is google?:
jah sag mir ma nen anständgien suchbegriff der etwas liefert außer schlechten batch tutorials.

also
danke biber, deine lösung is schon nah dran

genau genommen teste ich nutzungsrechte indem ich versuche ordner zu erstellen..
-wenn der ordner existiert (diesen teil habe ich nicht gepostet) ist alles in ordnung... dann wird weiter gemacht (das readme file müsste dementsprechend sowieso schon dort sein und nicht nochmal erzeugt werden.
-wenn rechte vorhanden sind wird der ordner erstellt und das readme file auch.
-wenn der ordner nicht erstellt werden kann kommt entsprechend die meldung: zugriff verweigert, das ist ok die meldung kann ich gebrauchen (nur die andere nicht..).
allerdings versuche ich dann auch noch das readme file zu erstellen und das scheitert mit nicht nur einer häßlichen fehlermeldung (insgesamt sind es 4 zeilen die rein sollen...).

so nun möchte ich einfach die fehlermeldung weg haben. zudem soll nicht jedesmal das file neu erstellt werden.

thx, Ph
bastla
bastla 06.06.2007 um 00:19:35 Uhr
Goto Top
Hallo Phlegma!

Dann meinst Du also eher diese Version:
if exist "%phlegdir%" goto :weiter  
md "%phlegdir%" || goto :weiter  
echo Hey du hast den Phlegma Ordner gefunden^^^^ >"%phlegdir%\README.txt"  
echo Zeile 2 >>"%phlegdir%\README.txt"  
echo Zeile 3 >>"%phlegdir%\README.txt"  
echo Zeile 4 >>"%phlegdir%\README.txt"  
:weiter
...

Grüße
bastla
Phlegma
Phlegma 06.06.2007 um 01:17:39 Uhr
Goto Top
oder meinst du das jez dass das meine version wäre oder die du dir ausgedacht hast?


und soll das heißen das die fehlerausgabe für die umleitung nicht abzuschalten ist?
bastla
bastla 06.06.2007 um 01:36:11 Uhr
Goto Top
Hallo Phlegma!

... die du dir ausgedacht hast?
Mit "Version" meinte ich eine von mehreren möglichen Umsetzungen - und ja, ich gebe zu, dass ich mir diese Variante ausgedacht habe ... face-wink
und soll das heißen das die fehlerausgabe für die umleitung nicht abzuschalten ist?
... nicht abzuschalten, aber zu vermeiden, wie mein Lösungsansatz hoffentlich gezeigt hat.

Noch zum (nicht möglichen) "Abschalten": Biber kann das sicher im Detail erklären - meine Interpretation ist, dass sich ein "2>nul" auf das "echo" beziehen würde, welches aber fehlerfrei ausgeführt wird - das Problem entsteht ja erst durch die Umleitung der Ausgabe zu einem ungeeigneten Ziel.

Grüße
bastla
Biber
Biber 06.06.2007 um 10:59:41 Uhr
Goto Top
Moin Phlegma und bastla,

dann würde ich noch in bastlas Variante ändern:
-oder-

Dann sollte Deine Anforderung erfüllt sein.

Gruss
Biber
bastla
bastla 06.06.2007 um 11:42:10 Uhr
Goto Top
@Biber
Anforderung war, dass ein ev Fehler bei "md" angezeigt wird, ansonsten müsste auch ein
md "%phlegdir%" 2>nul  
genügen - ein erfolgreiches "md" erzeugt ja eigentlich keine Ausgabe.

Die Schreibweise
2>&1
meine ich noch nie gesehen zu haben - was bewirkt sie?

Grüße
bastla
Phlegma
Phlegma 06.06.2007 um 13:16:40 Uhr
Goto Top
Die Schreibweise
2>&1
meine ich noch nie gesehen zu
haben - was bewirkt sie?

das würde mich auch interessieren...
zudem würde ich mich auch über eine aufklärung freuen wieso eine fehlerunterdrückung bei der ausgabe nicht möglich ist...

vielen dank ich werde die lösungen ausprobieren

gruß, Ph
Biber
Biber 06.06.2007 um 13:17:13 Uhr
Goto Top
@bastla
Anforderung war, dass ein ev Fehler bei "md" angezeigt wird, ....
Okay, dann sollte nicht zu ":weiter " gesprungen werden, sondern zu ":zeigeMdFehler" und von dort aus zu ":weiter"
ansonsten müsste auch ein md "%phlegdir%" 2>nul genügen
- ein erfolgreiches "md" erzeugt ja eigentlich keine Ausgabe.
Das stimmt. die Umleitung von 1 (STDOUT) ist überflüssig.

Die Schreibweise ">nul 2>&1" meine ich noch nie gesehen zu haben - was bewirkt sie?
Meist werden ja
  • Kanal 1 (STDOUT = CON: = Bildschirm) für Info-Meldungen und
  • Kanal 2 (STDERR = CON: = Bildschirm) für Fehlermeldungen
von Programmen für Bildschirmausgaben genutzt.

Das ermöglicht die Trennung von Info/Fortschrittsmeldungen (die kannst Du mit ">nul" entsorgen) und den Meldungen bei Fehlern.
Die kannst Du mit "2>mein.log" seperat umleiten.

Wenn Du z.B. irgendwelche "net use x: \\blabla\share"-Meldungen im Erfolgsfall NICHT in eine Logdatei schreiben willst, aber die Meldungen, wenn es schiefgeht, würdest Du schreiben:
net use x: \\blabla\share >nul 2>mein.log
Willst Du beides speichern:
net use x: \\blabla\share >>mein.log 2>&1
...was dann bedeutet:
  • leite Kanal 1= STDOUT um nach Datei mein.log (anhängend, falls die Datei schon existiert)
  • leite zusätzlich Kanal 2 um in den bereits offenen Kanal 1 ("bündele Kanäle")

Wenn die Umleitung nicht in mein.log erfolgt, sondern nach ">NUL", dann lässt sich auch schreiben:
net use x: \\blabla\share >Nul 2>Nul
Bei einer Datei würde das zu einem Fehler führen ("Datei ist bereits geöffnet")
 net use x: \\blabla\share >mein.log 2>mein.log
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.

Gruß
Biber
Phlegma
Phlegma 06.06.2007 um 13:27:44 Uhr
Goto Top
hm...
schön.

jez fehlt nurnoch die erklärung nach der ich kurz vor deinem post gefragt habe... bitte :D

??

gruß, Ph
bastla
bastla 06.06.2007 um 16:13:23 Uhr
Goto Top
@Biber
Danke für die Info.

Grüße
bastla
Phlegma
Phlegma 06.06.2007 um 21:09:15 Uhr
Goto Top
ok ich poste mal weiter ausholend meinen abschnitt und brauche dann die anpassung...
ich habe grad n bischen zeit.. blicke aber nicht durch ...( vllt liegt es auch am alkohol... ;D..nein ich hab nicht viel getrunken sonst könnte ich dash ier nicht schreiben....)

hier mein code:

::      PHLEGDIR / ZUGRIFF
        cls
        echo.
        echo Zugriff testen...
        echo.
        set "phlegdir=%windir%\Qi"  
        if not exist "%phlegdir%" ( md "%phlegdir%"  
                                  echo Hey du hast den Phlegma Ordner gefunden^^^^ >"%phlegdir%\README.txt" 2>nul  
                                  echo 2 >>"%phlegdir%\README.txt" 2>nul 3>nul 4>nul  
                                  echo 3 >>"%phlegdir%\README.txt" 2>nul  
                                  echo viel Spaá noch, Ph >>"%phlegdir%\README.txt" 2>nul )  
        if not exist "%phlegdir%" set "phlegdir=%userprofile%\Lokale Einstellungen\Anwendungsdaten\Microsoft\Qi"  
        if not exist "%phlegdir%" ( md "%phlegdir%"  
                                  echo Hey du hast den Phlegma Ordner gefunden^^^^ >"%phlegdir%\README.txt"  
                                  echo 2>>"%phlegdir%\README.txt" 2>nul  
                                  echo 3 >>"%phlegdir%\README.txt" 2>nul  
                                  echo viel Spaá noch, Ph >>"%phlegdir%\README.txt" 2>nul )  
        if not exist "%phlegdir%" set "phlegdir=%userprofile%\Eigene Dateien\Qi"  
        if not exist "%phlegdir%" ( md "%phlegdir%"  
                                  echo Hey du hast den Phlegma Ordner gefunden^^^^ >"%phlegdir%\README.txt"  
                                  echo 2 >>"%phlegdir%\README.txt"  
                                  echo 3>>"%phlegdir%\README.txt"  
                                  echo viel Spaá noch, Ph >>"%phlegdir%\README.txt" )  
        if not exist "%phlegdir%" ( title zugriff - Ph - No Rights  
                                  echo.
                                  echo  blabla
                                  echo  ..
                                  set "nr=1" & rem nr ist die no-rights variable!  
                                  pause >nul )
        pause

ich hab ein bischen unnötige infos gekürzt ich hoffe es wird nun ersichtlich was ich vorhabe.
ich möchte die fehlermeldungen bei den echo befhelen mit umleitung weghaben.
bastla
bastla 07.06.2007 um 20:31:05 Uhr
Goto Top
Hallo Phlegma!

So sollte es eigentlich das tun, was Du angeblich willst:
::      PHLEGDIR / ZUGRIFF
        @echo off & setlocal
		cls
        echo.
        echo Zugriff testen...
        echo.
        set "phlegdir=%windir%\Qi"  
		if exist "%phlegdir%" goto :weiter  
		call :Make
		if exist "%phlegdir%" goto :weiter  
		set "phlegdir=%userprofile%\Lokale Einstellungen\Anwendungsdaten\Microsoft\Qi"  
		call :Make
		if exist "%phlegdir%" goto :weiter  
		set "phlegdir=%userprofile%\Eigene Dateien\Qi"  
		call :Make
		if exist "%phlegdir%" goto :weiter  
		title zugriff - Ph - No Rights
        echo.
        echo  blabla
        echo  ..
        set "nr=1" & rem nr ist die no-rights variable!  
        pause >nul )
        :weiter
		pause
		goto :eof
		:Make
        md "%phlegdir%" 2>nul || goto :eof  
        echo Hey du hast den Phlegma Ordner gefunden^^^^ >"%phlegdir%\README.txt"  
        echo 2 >>"%phlegdir%\README.txt"  
        echo 3 >>"%phlegdir%\README.txt"  
        echo viel Spaá noch, Ph >>"%phlegdir%\README.txt"  
		goto :eof

Grüße
bastla
Phlegma
Phlegma 07.06.2007 um 23:47:02 Uhr
Goto Top
super ich verstehe auch was du mir da gepostet hast keine weitern erklärungen nötig vielen dank,
ich glaub ich hab es aus dem falschen standpunkt heraus gemacht und ich arbeite nicht viel mit calls.

vielen dank!
Ph