Mam skrypt "instalacyjny", który uruchamiam rano i uruchamia wszystkie programy, których potrzebuję. Teraz niektóre z nich wymagają dodatkowej konfiguracji środowiska, więc muszę je opakować w małe skrypty BAT.
Jak uruchomić taki skrypt na Windows XP w tle?
CALL env-script.bat
uruchamia go synchronicznie, tj. skrypt instalacyjny może być kontynuowany dopiero po zakończeniu działania polecenia w skrypcie env.
START/B env-script.bat
uruchamia inne wystąpienie CMD.exe w tym samym wierszu polecenia, pozostawiając go w naprawdę niechlujnym stanie (widzę dane wyjściowe zagnieżdżonego CMD.exe, klawiatura przez chwilę nie działa, skrypt nie jest wykonywany).
START/B CMD env-script.bat
daje ten sam wynik. Żadna z flag w CMD nie wydaje się pasować do mojego rachunku.
źródło
Dwa lata, ale dla kompletności ...
Standardowe podejście inline: (tj. Zachowanie, które można uzyskać podczas korzystania
&
z systemu Linux)Uwagi: 1.
CALL
jest sparowany z plikiem .bat, ponieważ to tam, gdzie zwykle się znajduje ... (tj. Jest to tylko rozszerzenieCMD /C CALL "foo.bat"
formularza, aby był asynchroniczny. Zwykle jest to wymagane do poprawnego pobrania kodów zakończenia, ale to nie jest problem tutaj.); 2. Podwójne cudzysłowy wokół pliku .bat są potrzebne tylko wtedy, gdy nazwa zawiera spacje. (Nazwa może być ścieżką, w którym to przypadku istnieje większe prawdopodobieństwo).Jeśli nie chcesz, aby wynik:
Jeśli chcesz, aby nietoperz działał na niezależnej konsoli: (np. W innym oknie)
Jeśli chcesz, aby drugie okno wisiało później:
Uwaga: W rzeczywistości jest to kiepska forma, chyba że masz użytkowników, którzy specjalnie chcą używać otwartego okna jako normalnej konsoli. Jeśli chcesz, aby okno pozostało w pobliżu, aby zobaczyć dane wyjściowe, lepiej umieścić znak
PAUSE
na końcu pliku bat. Lub jeszcze dodaj^& PAUSE
po linii poleceń:źródło
&
jest operatorem „a następnie” (terminologia?). (np.cmd1 & cmd2
oznacza wykonanie „cmd1”, a następnie „cmd2”. W przeciwieństwie do&&
operatora, wykonanie „cmd2” nie zależy od pomyślnego zakończenia operacji „cmd1”). Znak^
ucieka,&
więc trafia do argumentów CMD zamiast być zużyty i uruchamiany na tej samej konsoli, na której uruchomiono START.start
icmd
nie dawały pełnej funkcjonalności, której szukałem. Twoja odpowiedź jest trafna.START /B "" CMD /C "foo.bat" [args [...]] ^>nul 2^>^&1
START /B "" CMD /C PING 127.0.0.1 >NUL
wydaje się działać niezależnie od tego i nic nie jest wyświetlane. (Prawdopodobnie dlatego, żeCMD
dziedziczySTART
uchwyty I / O). Wydaje mi się, że różnica polega na tym, że chcesz zachowaćSTART
(błąd) wyjście nienaruszone, co jest prawdopodobnie dobrym pomysłem.CALL
jest tam tylko dlatego, że uważam, że warto zachować tę praktykę. (tj. nieużywanieCALL
do synchronicznych wywołań nietoperzy spowoduje nieprzewidywalne kody wyjścia, więc konsekwentnie paruję wywołania nietoperzy,CALL
nawet jeśli nie ma to ścisłego zastosowania, jak w tym przypadku.)Ponieważ START to jedyny sposób na wykonanie czegoś w tle ze skryptu CMD, radziłbym nadal go używać. Zamiast modyfikatora / B wypróbuj / MIN, aby nowo utworzone okno nie przeszkadzało. Możesz także ustawić priorytet na niższy za pomocą / LOW lub / BELOWNORMAL, co powinno poprawić szybkość reakcji systemu.
źródło
Termin inny niż termin pierwszoplanowy / istniejący. Innym sposobem na ukrycie uruchomionego okna jest użycie vbscript, jeśli jest ono nadal dostępne w twoim systemie.
nazwij go jako sth.vbs i wywołaj go z nietoperza, włóż zaplanowane zadanie itp. Osobiście wyłączę vbs bez pośpiechu w każdym systemie Windows, którym zarządzam :)
źródło
Utwórz nową aplikację C # Windows i wywołaj tę metodę z main:
źródło
Działa to w przypadku mojej instalacji systemu Windows XP Home w systemie Unix:
źródło
Właściwie jest to dość łatwe z tą opcją na końcu:
źródło
start
nie ma-WindowStyle
opcji.C:` instead of
Dziwna ścieżka ( C: \ Windows`) sugeruje, że znalazł narzędzie gdzieś w Internecie i skopiował je na swój dysk twardy.