2010-10-03 3 views

Antwort

3

Wenn ich mich nicht irre, ist% 0 der Pfad zum Aufruf der Batch-Datei.

+0

Ich bin Was passiert, wenn eine Batch-Datei (oder irgendein anderes Programm) eine andere Batch-Datei aufruft ... was '% 0' in der zweiten Batch-Datei? – st0le

+0

Ich würde das versuchen müssen, aber meine Vermutung wäre, dass es der Pfad ist, der in der Aufrufer-Batch-Datei bereitgestellt wird. – JoshD

+0

Nein, es ist die aktuelle Stapeldatei. – ubiquibacon

2

Geprüft und Arbeiten:

del %0 
exit 
+1

Es könnte besser so gemacht werden: 'del"% ~ f0 "& exit/b'. "% ~ f0" sorgt dafür, dass die Stapeldatei aus einem anderen Verzeichnis und aus Leerzeichen im Pfad ausgeführt wird. Das Einfügen beider Befehle in eine einzige Zeile vermeidet den Fehler "Datei nicht gefunden", der manchmal in der ursprünglichen Form auftreten kann, wenn die Zeile, die 'exit' enthält, nicht gepuffert wird, bevor' del' ausgeführt wird. Schließlich beendet '/ b' nur die Batch-Datei, anstatt die gesamte Konsole zu schließen. – atzz

+0

@atzzz - aber "exit/b" anstelle von "exit" führt zu einem hässlichen "Die Batch-Datei kann nicht gefunden werden." Fehlermeldung. – dbenham

+0

@dbenham - Sie haben Recht. (Interessanterweise kann ich mich nicht daran erinnern, diese Nachricht schon einmal erhalten zu haben; hat sich das Verhalten in den dazwischenliegenden Jahren geändert? Oder ist es meine Erinnerung?) Aber in meinem Buch ist es viel besser, als die Konsole direkt zu schließen. – atzz

1

% 0 gibt Ihnen den relativen Pfad der aus dem Verzeichnis, in dem die bat-Datei gestartet wurde. Also, wenn Sie es nennen

mybats\delyourself.bat tango roger 

% 0 enthält mybats\delyourself.bat

del %0 funktioniert, wenn Sie nicht Ihr aktuelles Verzeichnis geändert haben.

%~f0 exportiert den vollständigen Pfad zur Datei.

+2

Es besteht keine Notwendigkeit für 'SET path_to_bat =% ~ f0', da '% ~ f0' immer *** den vollständigen Pfad zum aktuell laufenden Batch-Skript angibt, auch wenn es in aufgerufenen Unterprogrammen oder bei CD oder PUSHD verwendet wird wurde seit dem Start ausgeführt. – dbenham

+0

oh natürlich! repariere es, weiß nicht warum ich dachte, dass es nötig wäre. Ich habe die Antwort aktualisiert. – peterchen

11

Keine der vorhandenen Antworten bietet eine saubere Möglichkeit für eine Batchdatei, sich selbst zu löschen und ohne sichtbare Fehlermeldung zu beenden.

Einfach einschließlich del "%~f0" löscht das Skript, aber es ergibt auch eine hässliche "Die Batch-Datei kann nicht gefunden werden." Fehlermeldung.

Wenn es OK für das Skript den Eltern CMD-Prozess (das Konsolenfenster) zu schließen, dann funktioniert das folgende ohne Fehlermeldung fein:

del "%~f0"&exit 

Aber es ist ein wenig komplizierter, wenn Sie wollen das Skript, um sich selbst zu löschen und ohne zu beenden, den übergeordneten CMD-Prozess zu schließen, und ohne jede Fehlermeldung.

Methode 1: Starten Sie einen zweiten Prozess, der innerhalb desselben Konsolenfensters ausgeführt wird, das das Löschen tatsächlich ausführt. Die EXIT /B ist wahrscheinlich nicht notwendig, aber ich habe es eingefügt, um die Wahrscheinlichkeit zu maximieren, dass das Batch-Skript geschlossen wird, bevor der gestartete Prozess versucht, die Datei zu löschen.

start /b "" cmd /c del "%~f0"&exit /b 

Methode 2: Erstellen und Steuerung auf eine andere temporäre Batch-Datei übertragen, die selbst als auch der Anrufer löscht, aber nicht verwenden Anruf, und leiten stderr zu nul.

>"%~f0.bat" echo del "%~f0" "%~f0.bat" 
2>nul "%~f0.bat" 
-1

Für mich war es wichtig, dass ich keine Errorlevel 1, nachdem ich die Batch-Datei beendet haben. Ich fand eine passende und einfache Antwort auf diese Weise: DeleteMyself.cmd:

START CMD /C DEL DeleteMyself.cmd 

Testansatz, wenn DeleteMyself.cmd Rückkehr wird Errorlevel 0 TestDeleteMyself.cmd:

call DeleteMyself.cmd 
echo Errorlevel: %errorLevel% 
Verwandte Themen