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


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


128
2017-10-12 06:09


origine


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 souhaitez-vous exécuter toute la ligne de commande en arrière-plan, afin qu'elle ne soit pas visible depuis le bureau? - omnibrain
J'ai besoin de deux cannes effectuer une commande sur la ligne de commande en arrière-plan ou voulez-vous effectuer toute la ligne de commande en arrière-plan - Mohammad AL-Rawabdeh
Doublons cette question sur ServerFault. - Dan Dascalescu


Réponses:


Votre question est assez vague, mais il y a un publier sur ServerFault qui peut contenir les informations dont vous avez besoin. La réponse décrit 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 course   La méthode 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 planifier. Le deuxième argument de cet exemple définit la fenêtre   style. 0 signifie "cacher la fenêtre".


25
2017-10-12 06:30



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


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 le plus proche de la commande Linux:

program &

Depuis le système d’aide 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 avec cela est que vous avez plus d'un programme écrit dans la fenêtre de la console, cela devient un peu déroutant et confus.

Pour ne pas interagir avec l'utilisateur, vous pouvez rediriger la sortie vers un fichier:

START /B program > somefile.txt

187
2018-05-03 14:28



J'aime mieux cette réponse car elle n'ouvre pas une autre fenêtre de commande - wisbucky
Cela ne semble pas fonctionner pour moi, il semble créer seulement une nouvelle instance de cmd [?] Cependant si je l'exécute comme start /B "" program alors ça a fonctionné ... - rogerdpack
@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
Malheureusement, si je quitte la fenêtre shell dans laquelle j'ai généré le processus, il semble que le processus se termine également. - palswim
@Qwerty: Regardez le MSDN pour SetConsoleCtrlHandler - Zan Lynx


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

START "" program

Quel est l'équivalent Unix de

program &

59
2017-09-30 11:44



Qu'est ce que l'équivalent fg? Pouvons-nous fermer l'invite de commande et le porgram continuera à fonctionner? - Nenotlep
Aussi, je veux lancer un programme dans l'invite de commande et y revenir de temps en temps, comme dans l'écran - est-ce faisable avec cela? Je dois pouvoir fermer l'invite de commande tout en conservant le programme en cours d'utilisation. - Nenotlep
Quel est ce paramètre vide de start? Il ne fonctionne pas sans (exécute juste une nouvelle instance de commande), mais startl'aide ne dit rien à ce sujet, il indique que tous les paramètres sont optinionnels (ou je ne les comprends pas). - Dawid Ferenczy
@DawidFerenczy start fonctionne sans le paramètre vide pour moi, mais je semble avoir un shell avec une configuration séparée quand j'utilise le paramètre vide, comme un réglage que je faisais quand je n'avais pas le paramètre vide n'est pas utilisé quand j'utilise le vide paramètre. Je me demande pourquoi ils utilisent des configurations séparées? - HelloGoodbye
@Paul START "" program commence une commande dans un nouveau terminal pour moi, tout en program & dans Unix exécute la commande et imprime la sortie sur le même terminal. - HelloGoodbye


START /MIN program 

celui ci-dessus est assez proche avec son homologue Unix program &


10
2017-09-13 06:55





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

Sauve le comme un .ps1 fichier. Après avoir activé l'exécution du script (voir Activation des scripts dans le wiki du tag PowerShell), vous pouvez lui passer 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 sous Windows 10.


5
2017-09-01 22:20



yep start / b ne fonctionne plus. - Sajuuk


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


1
2017-09-30 14:00



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 le schtasks commande dans Windows XP et supérieur (avertissement: schtasks c'est compliqué). - LawrenceC


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

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

Merci


1
2017-07-09 04:30