Jak „wstrzymać” tylko w przypadku wykonywania w nowym oknie?

2

Jestem autorem skryptu wsadowego, który zakłada %1 to ścieżka do pliku. Czasami chciałbym użyć tego skryptu wsadowego za pomocą przeciągnij i upuść w Eksploratorze Windows (przeciągając mój plik docelowy na mój plik skryptowy wsadowy), a innym razem chciałbym uruchomić ten skrypt wsadowy z istniejącego okna wiersza polecenia i podać mój %1 ścieżka jawnie (zwykle tylko ścieżka względna).

Nie chcę, aby mój skrypt zniknął natychmiast po „przeciągnięciu upuszczania”, więc muszę pause. Nie chcę jednak naciskać any key to continue za każdym razem, gdy używasz istniejącego okna wiersza poleceń, więc nie chcę pause.

Czy istnieje sposób na to, aby mieć najlepsze z obu światów? Czy mogę w jakiś sposób wykryć / wywnioskować scenariusz, w którym się znajduję, i zdecydować się na przerwę, a nie na później? Jakie jest najlepsze podejście tutaj?

DuckMaestro
źródło

Odpowiedzi:

4

Spróbuj użyć tego w pliku wsadowym:

set arg0=%0
if [%arg0:~2,1%]==[:] pause

Sprawdza, czy trzeci znak argumentu 0 (w zasadzie sama nazwa pliku wsadowego) jest dwukropkiem.

Zwykle, gdy przeciągasz i upuszczasz coś w pliku wsadowym, nazywa się to: "Drive:\path\to\Batch File.bat" Arg1 Arg2 ... Jednak kiedy wykonujemy plik wsadowy z wiersza poleceń, zazwyczaj nie nazywamy go tak, cytowaną ścieżką absolutną. Dzięki temu możemy wykorzystać tę różnicę i wykonać pause tylko wtedy, gdy dwukropek istnieje jako trzeci znak, co oznacza, że ​​plik wsadowy został wykonany za pomocą metody przeciągnij i upuść. Oczywiście, jeśli użyjesz cytowanej ścieżki bezwzględnej do wykonania pliku wsadowego z wiersza polecenia, będzie to naturalnie pause także.

Karan
źródło
Dokładnie to, czego potrzebuję.
DuckMaestro
3

Rzuć cmd /k na końcu twojego skryptu. W istniejącym oknie powróci do wiersza polecenia, aw nowym oknie zrobi to samo, utrzymując otwarte okno.

@echo off
echo "some text"
cmd /k

Zauważ, że / k ma zatrzymać drukowanie:

Microsoft Windows [wersja 6.1.7601]   Copyright (c) 2009 Microsoft Corporation. Wszelkie prawa zastrzeżone.

Taz
źródło
+1. Jest to pomocne, chociaż ma to skutek uboczny, kiedy zostawiam otwarty wiersz polecenia, kiedy naprawdę chciałbym zachować zachowanie pause w ten sposób mogę po prostu nacisnąć spację (lub dowolny klawisz), aby zamknąć nowe okno.
DuckMaestro
Co powiesz na Alt + F4? : P Nie sądzę, że istnieje niestety sposób na rozróżnienie obu sytuacji. Byłoby miło, gdyby ktoś udowodnił, że się mylę.
Taz
Haha, właśnie próbowałem zamknąć wiersz polecenia za pomocą Alt + F4, aby odkryć, że nie działa. -.-
Taz