Jak sprawić, by plik wsadowy sam się usunął?

Czy możliwe jest usunięcie pliku wsadowego?

Próbowałem go uruchomić inny plik, aby go usunąć, ale to nie działa, czy ktoś wie, jak Mogę to zrobić. Plik wsadowy, którego używam, jest podwyższony. Mój system operacyjny to Windows 7 32 bit.

Author: Brian Tompsett - 汤莱恩, 2013-12-02

8 answers

Odpowiedź Npocmaka działa, ale generuje następujący komunikat o błędzie: "nie można znaleźć pliku wsadowego." to nie jest problem, jeśli okno konsoli zamyka się po zakończeniu skryptu, ponieważ wiadomość będzie migać tak szybko, że nikt go nie zobaczy. Ale jest to bardzo niepożądane, jeśli konsola pozostaje otwarta po zakończeniu skryptu.

Sztuką usuwania pliku bez komunikatu o błędzie jest uzyskanie innego ukrytego procesu do usunięcia pliku po skrypcie / align = "left" / Można to łatwo zrobić za pomocą START / B, aby uruchomić proces usuwania. Proces usuwania wymaga czasu, aby zainicjować i wykonać proces usuwania, więc skrypt nadrzędny ma szansę zakończyć czysto przed usunięciem.

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

Możesz po prostu użyć podprogramu, jeśli obawiasz się, że SHIFT zniszczy wartość %0.

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

Aktualizacja 2015-07-16

Odkryłem kolejny naprawdę sprytny sposób na usunięcie skryptu wsadowego bez generowanie dowolnego Komunikatu o błędzie. Technika zależy od nowo odkrytego zachowania GOTO (odkrytego przez niektórych Rosjan), opisanego w języku angielskim na {23]} http://www.dostips.com/forum/viewtopic.php?f=3&t=6491

Podsumowując, (GOTO) 2>NUL zachowuje się jak EXIT /B, z tym, że pozwala na wykonywanie połączonych poleceń w kontekście wywołującego!

So all you need is

(goto) 2>nul & del "%~f0"
 56
Author: dbenham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-06 15:52:30
( del /q /f "%~f0" >nul 2>&1 & exit /b 0  )

Ustaw to na końcu skryptu. (może nie działać, jeśli używane jest polecenie SHIFT)

 6
Author: npocmaka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-02 14:40:40
del "%~f0"

Będzie działać, ale pojawia się komunikat o błędzie, jeśli wywołasz go z wcześniej otwartej konsoli (można go jednak zignorować).

 5
Author: JeffRSon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-02 14:39:12
del %0

Jako ostatnia linia pliku jest najprostszym sposobem, jaki znalazłem. %0 zwraca nazwę aktualnie wykonywanego pliku .cmd.

Kiedy po raz pierwszy próbowałem, myślałem, że dostanę błąd "plik w użyciu", ale do tej pory się to nie zdarzyło.

 1
Author: archer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-08 16:40:16

Jako odpowiedź na to pytanie , (które zostało wstrzymane) ta partia sam się zniszczy po trzech biegach. Kod, aby to osiągnąć, jest skondensowany w ostatnich 3 liniach. Zawiera nad końcówką z dbenham

@Echo off
Rem batch main purpose
Rem
Rem
Set Tok=###&For /f %%C in ('find /C "%Tok%" ^<"%~f0"') Do Set /A Cnt=%%C
Echo Run-%Cnt%&If %Cnt% Geq 3 (goto) 2>nul & del "%~f0"
Echo %Tok%>>"%~f0"& Goto :Eof

Partia zmienia się poprzez dołączanie tokena po każdym uruchomieniu i zliczanie wystąpień tokena. Jeśli liczba zostanie osiągnięta, usuwa się.

> Dir /B Kill*
KillMySelf.cmd

> KillMySelf.cmd
Run-1

> KillMySelf.cmd
Run-2

> KillMySelf.cmd
Run-3

> Dir /B Kill*
File Not Found
 1
Author: LotPings,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:15

Możesz użyć del (name) jeśli jest na pulpicie, w przeciwnym razie użyj del (path to file ex. del C:\WINDOWS.

P. S nie popełnia błędu msg

 0
Author: ThE WAtChEr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-17 02:57:19

Del %0 jako ostatnia linia pliku wsadowego

 0
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-08 21:47:08

Możesz ustawić opóźnienie, aby uniknąć warunków wyścigu, tutaj jest 15 sekund:

START /B CMD.EXE /D /C "PING.EXE -n 15 127.0.0.1 && DEL prova.bat"

Uwagi

    CMD.EXE / D jest obowiązkowe, aby uniknąć wykonania auto-run crap-ware
  • PING I DEL muszą być wykonywane syncronous, więc otoczone cudzysłowami
  • pozwalam użytkownikom, jak przekazać nazwę partii za pomocą "%~f0 "
 0
Author: Massimo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-15 16:09:33