Vraag Voer een .bat-bestand uit in een geplande taak zonder een venster


Ik heb een geplande taak die een batch-script start dat wordt uitgevoerd robocopy elk uur. Elke keer dat het draait, verschijnt er een venster op het bureaublad met robocopy-uitvoer, wat ik niet echt wil zien.

Ik heb het voor elkaar gekregen om het venster geminimaliseerd te laten lijken door de geplande taak uit te voeren

cmd /c start /min mybat.bat

maar dat geeft me elk uur een nieuw opdrachtvenster. Ik was hierdoor verrast, gegeven cmd /c "Voert de opdracht uit die wordt opgegeven door tekenreeks en wordt vervolgens beëindigd" - Ik heb de documenten verkeerd begrepen.

Is er een manier om een ​​batch-script uit te voeren zonder dat het een cmd-venster laat verschijnen?


139
2018-05-17 09:00


oorsprong


Ik vond dit een beter antwoord stackoverflow.com/questions/6568736/... - Efekt


antwoorden:


U zou het in stilte kunnen uitvoeren met behulp van een Windows Script-bestand. Met de methode Uitvoeren kunt u een script uitvoeren in de onzichtbare modus. Maak een .vbs bestand zoals dit

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

en plan het in. Het tweede argument in dit voorbeeld stelt de vensterstijl in. 0 betekent "verberg het venster".

Volledige syntaxis van de Voer de methode uit:

 object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

argumenten:

  • object: WshShell-object.
  • strCommand: Stringwaarde die de opdrachtregel aangeeft die u wilt uitvoeren. U moet alle parameters opnemen die u wilt doorgeven aan het uitvoerbare bestand.
  • intWindowStyle: optioneel. Geheel getal waarmee het uiterlijk van het programmavenster wordt aangegeven. Merk op dat niet alle programma's gebruik maken van deze informatie.
  • bWaitOnReturn: optioneel. Booleaanse waarde die aangeeft of het script moet wachten totdat het programma is voltooid voordat wordt doorgegaan naar de volgende instructie in uw script. Indien ingesteld op true, stopt de scriptuitvoering totdat het programma is voltooid en geeft Run een foutcode terug die door het programma is geretourneerd. Indien ingesteld op false (de standaardwaarde), keert de Run-methode onmiddellijk terug na het starten van het programma en retourneert automatisch 0 (niet te interpreteren als een foutcode).

142
2018-05-17 09:08



+1, schreef gewoon precies hetzelfde - Sam Cogan
Ik zag het voordat je het verwijderde. Ik denk dat we allebei bots zijn. ;-) - splattne
gebruikersnaam, ik denk eerlijk gezegd dat Sam het veel meer verdient dan ik. Maar toch bedankt! En vermeld mij en Jon Skeet niet in dezelfde zin. Dat is godslastering! ;-) - splattne
Op de vraag "Is er een manier om een ​​batch-script uit te voeren zonder dat het een cmd-venster laat verschijnen?", Geeft dit een zeer direct antwoord: voer het uit met een Windows Script-bestand. - Mark Meuer
@Lee Ik vermoed dat dubbele aanhalingstekens nodig zijn als je pad spaties bevat. - splattne


Gebruikt u dit als een geplande taak? Als dit zo is ingesteld dat het wordt uitgevoerd als een ander gebruikersaccount, is het niet zichtbaar voor de aangemelde gebruiker. Als het script geen netwerktoegang nodig heeft voor items waarvoor Windows Authentic nodig is (zoals bestandsshares of printers), kunt u het uitvoeren als "nt authority \ system" en het wachtwoord leeg laten. Stel in Windows 7 de gebruiker in op SYSTEM en druk op OK.

(U moet waarschijnlijk een echte gebruiker gebruiken als u robocopy gebruikt ...)

JR


55
2018-05-17 09:13



Bedankt - dit was voor mij minder gedoe dan de .vbs-optie. - mackenir
Ik heb de "Uitvoeren als" -gebruiker ingesteld op SYSTEEM (dat later is gewijzigd o NT AUTHORITY \ SYSTEM) en het werkte voor mij. Ik zie niet langer het popup-CMD-venster wanneer mijn geplande taak wordt uitgevoerd. Bedankt! - Ryan Stille
+1, dit is elegant. Zorg ervoor dat u "systeem" als gebruikersnaam invoert, en win7 doet de rest voor u. Merk op dat u wel netwerktoegang tot internet krijgt, alleen niet voor gedeelde netwerken en voor zaken waarvoor Windows Authentic nodig is. - samsmith
Systeemgebruiker is eenvoudig en elegant, geweldig TIP! +1! - Matteo Conta
Zien Luid-Privilege administratieve modellen implementeren. Is gebruik van het systeemaccount hiervoor een overtreding van Least-Privilege-beleid? Als dit het geval is, moeten beheerders dit weten niet doe dit in de meeste situaties. - user34660


Configureer gewoon de geplande taak als "Voer uit of de gebruiker is aangemeld of niet".


27
2017-10-04 20:06



Perfect! U kunt de opslag van legitimatiegegevens zelfs uitschakelen en dan wordt dit veiliger dan wanneer SYSTEEM het uitvoert! - binki


Je zou het ook kunnen proberen CHP (maak een verborgen proces), doet precies wat je zou denken ...

CHP.EXE mybat.bat

Wordt uitgevoerd zonder opdrachtvenster. Perfect! Gemaakt door dezelfde mensen als CMDOW, maar dit is meer geschikt.


17
2017-07-20 21:54



Werkt perfect wanneer u de taak moet uitvoeren in de context van de aangemelde gebruiker ("Trigger: verbinding maken met gebruikerssessie", "Taak uitvoeren als: gebruikers") - Sergei
dit is geen ingebouwd hulpmiddel - Jonny Leeds


CMDOW is een geweldige tool waarmee je vanuit de commandoregel heel veel dingen kunt doen met Windows.

Een van de eenvoudigste dingen om te doen is het huidige venster verbergen (meestal als een eerste regel in het bat-bestand) met:

cmdow @ /hid

of start een nieuw verborgen proces met

cmdow /run /hid mybat.bat 

9
2018-05-17 11:30



Zowel dit als de suggestie van Rocketmonkeys omvatten het downloaden van nieuwe tools, wat meer compatibiliteit betekent tussen verschillende desktops van mensen. De ingebakken, met behulp van Windows-commando's is veel beter. - IanVaughan
Plus cmdow wordt door sommige antivirusprogramma's als "gevaarlijk" gedetecteerd (het is niet gevaarlijk, maar de detectie zelf kan enige problemen veroorzaken als het cmdow-bestand in quarantaine wordt geplaatst ...). - Otiel
er is nog steeds een pop-upconsole, gewoon heel snel knipperen. - Bamboo


Probeer het script aan te roepen met

start /b <command>

5
2018-05-17 14:54



Dit werkt niet, de geplande taak-> Status staat "Could not start", dat wil zeggen met: start / b C: \ file.bat: en: start / b "C: \ file.bat": but: C: \ file.bat: werkt prima. - IanVaughan
Omdat start is geen programma, het is een commando. U moet aangeven cmd als het programma om uit te voeren en /c start /b <file> als het argument. Dit gaat echter nog steeds niet werken omdat er nog steeds een consolevenster voor wordt gemaakt cmd en flits een zwart venster op het scherm. - Synetech
Kan ook met @Synetech bevestigen dat dit geen nieuw venster zal maken, maar u moet wel een consolevenster openen om het te starten. Dit is inderdaad een handig commando, maar kan niet worden gebruikt zoals gevraagd met Geplande taken. - JonathanDavidArndt


U kunt een snelkoppeling naar het batchbestand maken, de snelkoppeling instellen om geminimaliseerd te starten (in de eigenschappen van de snelkoppeling, tabblad 'Snelkoppeling') en vervolgens de taak instellen om de snelkoppeling te starten.

Belangrijk: U moet het pad naar de snelkoppeling handmatig opgeven door het in het tekstveld Run in te voeren, compleet met de extensie '.lnk'; als je ernaar probeert te bladeren, zal dat gebeuren behulpzaam omleiden naar waar de snelkoppeling naar verwijst.


5
2017-08-11 16:49



Dit werkt niet op Windows 10 x64, dit geeft een popup "Hoe wil je dit bestand openen?" - Jan


Ik realiseer me dat deze vraag al is beantwoord met een volkomen goede resolutie die eigen is aan Windows en dus het meest compatibel zou moeten zijn, en ik ben het er volledig mee eens.

Ik wilde ook zeggen dat ik het niet eens ben met de opmerking van @ splattne (maar niet zijn feitelijke antwoord) - dat de resolutie in de andere thread waarnaar wordt verwezen de eer verdient. Dat antwoord houdt in dat het script als een andere gebruiker (SYSTEM) wordt uitgevoerd, wat ongeveer overeenkomt met het geven van toegang tot het script root. Het zal ook mislukken voor taken zoals ROBOCOPY (zoals verwezen door John Rennie), waarvoor netwerktoegang vereist is.

ik heb het nooit geprobeerd CMDOW voorheen, maar ik zou graag een andere vergelijkbare resolutie willen aanbieden, die [hoewel niet standaard geïnstalleerd op Windows] nog steeds zeer draagbaar is voor de meeste versies, en wordt geleverd in zowel 32- als 64-bitversies, en dat is NirCmd.

NirCmd is een zeer krachtige tool die talloze opties heeft, waarvan ik het meest handig vind dat het de mogelijkheid heeft om verborgen opdrachtvensters te openen door simpelweg het volgende uit te voeren:

c:\path\to\nircmd.exe exec hide "c:\path\to\mybat.bat"

Van de exec gedeelte van De NirCmd-opdrachtreferentie:

exec [show/hide/min/max] [application + command-line]

Voert een toepassing uit en geeft optioneel een of meer opdrachtregelparameters op voor de uitgevoerde toepassing. De show/verbergen/ min / max] parameter geeft aan of de actieve toepassing zichtbaar is of niet. Als 'hide' is opgegeven, is de actieve applicatie niet zichtbaar voor de gebruiker. Als 'max' is opgegeven, wordt het actieve toepassingsvenster gemaximaliseerd. Als 'min' is opgegeven, wordt het geopende applicatievenster geminimaliseerd.

BEWERK: Ik probeerde een te rennen ROBOCOPY taak en probeerde de methode in dit antwoord, en het werkte niet, zelfs na het bewerken van de netwerktoegangsprivileges. Ik probeerde te dubbelklikken op het script en kon het niet laten werken, maar kon het alleen laten uitvoeren onder een verhoogde opdrachtprompt. Ik heb wel een snelkoppeling naar het batchbestand gemaakt en deze als Administrator laten uitvoeren en heb het kunnen uitvoeren door erop te dubbelklikken, maar de methode die ik uiteindelijk gebruikte was om het uit te voeren als SYSTEM (ik weet het, ik weet het) - maar het werkt wel ROBOCOPY, voor wat het waard is, zolang het batchbestand de juiste rechten heeft.

EDIT 2: Om een ​​of andere reden zou het niet werken als SYSTEEM (waarschijnlijk het netwerktoegangsartikel waar eerder naar werd verwezen) - ik merkte dit pas op nadat het echt was uitgevoerd ROBOCOPY zonder de / L-vlag, die in feite gewoon een simulatie is en [blijkbaar] niet daadwerkelijk verbinding maakt met het externe systeem, maar wanneer ik het batchbestand met de hoogste rechten uitvoert en het verborgen vakje aanvink, en ik kan het nog steeds uitvoeren als het ingelogde gebruiker op de achtergrond zonder dat een opdrachtvenster wordt weergegeven, voor wat dit voor iedereen waard is.


1
2018-05-01 03:38





Een andere oplossing die ik heb gebruikt is Verborgen start


0
2017-07-01 07:38





Probeer aan het einde van uw batchbestand een exit-opdracht in te voeren. Dit zou het commandovenster moeten sluiten als het script klaar is.


-2
2017-08-13 11:58