Comment puis-je exécuter une ligne de commande Windows en arrière-plan?

160

Comment puis-je exécuter une ligne de commande Windows en arrière-plan, sans que celle-ci interagisse avec l'utilisateur actif?

Mohammad AL-Rawabdeh
la source
1
Pouvez-vous préciser ce que vous voulez faire? Voulez-vous exécuter une commande sur la ligne de commande en arrière-plan ou voulez-vous exécuter la ligne de commande complète en arrière-plan, de sorte qu'elle soit invisible à partir du bureau?
Omnibrain
J'ai besoin de deux canne pour exécuter une commande sur la ligne de commande en arrière-plan ou voulez-vous effectuer toute la ligne de commande en arrière
Mohammad AL-Rawabdeh
Duplique cette question sur ServerFault .
Dan Dascalescu

Réponses:

37

Votre question est assez vague, mais il existe un article sur ServerFault qui peut contenir les informations dont vous avez besoin. La réponse à cette question explique comment exécuter une fenêtre de fichier de commandes masquée:

Vous pouvez l'exécuter en mode silencieux à l'aide d'un fichier de script Windows. La méthode d'exécution vous permet d'exécuter un script en mode invisible. Créer un .vbs fichier comme celui-ci

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing

et le programmer. Le deuxième argument de cet exemple définit le style de la fenêtre. 0 signifie "cacher la fenêtre".

ne pas penser
la source
C'est parfait. SetPoint pour Logitech ne commence jamais, JAMAIS, avec Windows. Je le lance manuellement depuis environ 3 ans maintenant. Est-ce important où le lot est? J'ai vu certaines personnes mettre ce type de fichier de commandes en C, ou la racine.
ejbytes
245

C’est un peu tard, mais j’ai juste rencontré cette question en cherchant moi-même la réponse et j’ai trouvé ceci:

START /B program

qui, sous Windows, est la plus proche de la commande Linux:

program &

Depuis le système HELP de la console:

C:\>HELP START

Starts a separate window to run a specified program or command.

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
      [command/program] [parameters]

    "title"     Title to display in window title bar.
    path        Starting directory.
    B           Start application without creating a new window. The
                application has ^C handling ignored. Unless the application
                enables ^C processing, ^Break is the only way to interrupt
                the application.

Un problème que j’ai vu est qu’il ya plus d’un programme écrit dans la fenêtre de la console, cela devient un peu déroutant et confus.

Pour qu'il n'interagisse pas avec l'utilisateur, vous pouvez rediriger la sortie vers un fichier:

START /B program > somefile.txt
Novicaine
la source
3
J'aime mieux cette réponse parce qu'elle n'ouvre pas une autre fenêtre de commande
wisbucky
3
Cela ne semble pas fonctionner pour moi, il semble créer uniquement une nouvelle instance de cmd [?] Cependant, si je l'exécute comme start /B "" programcela fonctionnait alors ...
rogerdpack
1
@rogerdpack C'est vrai. Pour une raison quelconque avec Windows 7, il s’agit du format de commande. Le "" est le paramètre de titre obligatoire.
ejbytes
10
Malheureusement, si je quitte la fenêtre shell dans laquelle j'ai créé le processus, il semble que le processus se termine également.
palswim
2
@Qwerty: consultez le MSDN pour SetConsoleCtrlHandler
Zan Lynx
68

Je suppose que vous voulez dire: exécutez quelque chose en arrière-plan et récupérez la ligne de commande immédiatement, le programme lancé se poursuivant.

START "" program

Quel est l'équivalent Unix de

program &
Paul Douglas
la source
7
quel est l'équivalent fg? Pouvons-nous fermer l'invite de commande et le programme continuera à fonctionner?
Nenotlep
1
De plus, je veux exécuter un programme à l’invite de commande et y revenir de temps en temps, comme à l’écran - est-ce faisable avec cela? Je dois pouvoir fermer l'invite de commande mais garder le programme en cours d'utilisation utilisable.
Nenotlep
4
Quel est ce paramètre vide de start? Cela ne fonctionne pas sans cela (exécute seulement une nouvelle instance de commande), mais startl'aide ne dit rien à ce sujet, il indique que tous les paramètres sont facultatifs (ou que je ne le comprends pas).
Dawid Ferenczy Rogožan
@ DawidFerenczy startfonctionne sans le paramètre vide pour moi, mais il semble que je reçoive des shells avec une configuration distincte lorsque j'utilise le paramètre vide. Un paramètre que j'ai fait lorsque je n'avais pas le paramètre vide n'est pas utilisé lorsque je l'utilise. le paramètre vide. Je me demande pourquoi ils utilisent des configurations séparées?
HelloGoodbye
@Paul START "" programlance une commande dans un nouveau terminal pour moi, tandis program &qu'Unix l'exécute et affiche la sortie sur le même terminal.
HelloGoodbye
15
START /MIN program 

ce qui précède est assez proche avec son homologue Unix program &

Siva Sankaran
la source
6

Vous pouvez utiliser ce script PowerShell (commenté!):

# Create the .NET objects
$psi = New-Object System.Diagnostics.ProcessStartInfo
$newproc = New-Object System.Diagnostics.Process
# Basic stuff, process name and arguments
$psi.FileName = $args[0]
$psi.Arguments = $args[1]
# Hide any window it might try to create
$psi.CreateNoWindow = $true
$psi.WindowStyle = 'Hidden'
# Set up and start the process
$newproc.StartInfo = $psi
$newproc.Start()
# Return the process object to the caller
$newproc

Enregistrez-le sous forme de .ps1fichier. Après avoir activé l'exécution du script (voir Activation des scripts dans le wiki de la balise PowerShell ), vous pouvez lui transmettre une ou deux chaînes: le nom de l'exécutable et éventuellement la ligne d'arguments. Par exemple:

.\hideproc.ps1 'sc' 'stop SomeService'

Je confirme que cela fonctionne sur Windows 10.

Ben N
la source
4
yep start / b ne fonctionne plus.
Sajuuk
3

Voici comment mon serveur interne PHP passe en arrière-plan. Donc, techniquement, cela devrait fonctionner pour tous.

start /B "" php -S 0.0.0.0:8000 &

Merci

Suyash Jain
la source
1

Si vous souhaitez que le programme de ligne de commande s'exécute sans que l'utilisateur le sache, définissez-le en tant que service Windows et il s'exécutera selon un planning.

CarlF
la source
4
comment tu fais ça?
Barlop
Vous pouvez également en faire une tâche planifiée - Panneau de configuration -> Outils d’administration -> Tâches planifiées ou utiliser la schtaskscommande dans Windows XP et versions ultérieures (avertissement: schtasksest compliqué).
LawrenceC
0

Une réponse connexe, avec 2 exemples:

  1. Ci-dessous ouvre calc.exe:

appelez START / B "my calc" "calc.exe"

  1. Parfois, le premier plan n'est pas souhaitable, puis vous exécutez comme indiqué ci-dessous:

Appelez START / MIN "my mongod" "% ProgramFiles% \ MongoDB \ Server \ 3.4 \ bin \ mongod.exe"

Manohar Reddy Poreddy
la source
Cela ne semble pas être minimisé:call Start /MIN "c" "calc.exe"
Moondra
1
correct, cela fonctionne pour le bloc-notes: appelez start / min "n" "notepad.exe"
Manohar Reddy Poreddy
Donc, cela fonctionne pour les applications fenêtrées mais pas pour les applications console. Figures, que l' on peut passer le SW_*à CreateProcessWvia STARTUPINFO::wShowWindow(y compris SW_HIDE).
0xC0000022L
Qu'est-ce qu'une commande complète, avec comme ci-dessus "start" ou un autre outil? Avons-nous besoin d'écrire un autre programme?
Manohar Reddy Poreddy
-2

vient de tomber sur ce fil Windows 7, à l'aide de Power Shell, exécute les exécutables en arrière-plan, exactement comme Unix nomfichier &

exemple: start -NoNewWindow nomfichier

aider à démarrer

NAME Start-Process

Le processus de démarrage SYNTAX [-WindowStyle {Normal | Caché | Minimisé | Maximisé}] [-UseNewEnvironment] []

Start-Process [-FilePath] <string> [[-ArgumentList] <string[]>] [-WorkingDirectory <string>] [-PassThru] [-Verb
<string>] [-Wait] [-WindowStyle <ProcessWindowStyle> {Normal | Hidden | Minimized | Maximized}]
[<CommonParameters>]

ALIASES saps start

Jerry
la source