Drobnost, triviální, ale zatraceně mi pomohla.

Potřeboval jsem kopírovat nové soubory z výchozích Dokumentů do Dropboxu, ale tak, aby se tam nekopírovaly Obrázky, Hudba a Videa – takže klasické přesunutí Dokumentů do Dropboxu se použít nedá. Nejsem fanda instalace desítek programů, ten bordel v registrech mi za to nestojí (i Diablo 3 jsem teď instaloval do sandboxu :-)), takže co takhle příkazová řádka (jo, vyrůstal jsem na DOSu) a Plánovač úloh? Nic se nebude muset instalovat a je to nastavené za minutu. No jo, ale – pokud Plánovač spustí bat soubor, zobrazí se otravné okno příkazové řádky, co s tím?

V jednoduchosti je krása, takže: jak spustit script (ok, obyčejný bat soubor) aniž by si toho uživatel byť jen všiml? Inspiraci dodali tvůrci virů a červů, kteří využívají roztomilou funkci VisualBasicu. A víte, co je na tom nejlepší? Ani to visual studio nepotřebujete. Windows 7 umí spouštět skripty vbs už v základu, u starších verzí bude možná třeba instalovat nějaké knihovny, ale to jsem nezkoušel.

Pro spuštění libovolného bat souboru tak, aby se v systému nic nezobrazilo, pak stačí v textovém editoru vložit kód:
/—html

Set WshShell = WScript.CreateObject(„WScript.Shell“)
WshShell.run „%comspec% /c c:\cesta\k_vasemu_bat\něco.bat„,0
Set WshShell = Nothing

\—
a celé to uložit jako cokoliv.vbs (jo, c:\cesta\k_vasemu_bat\něco.bat logicky nahraďte :-).

A to je všechno. Tenhle skript při spuštění zavolá odkazovaný bat soubor a provede ho v tichosti a neviditelně. Stejně se chová i při zadání do Plánovače. Velmi šikovné, nejen pro kopírování.

A pro líné čtenáře ještě doplním obsah mého zaloha_doc.bat

robocopy c:\Users\Martin\Documents\ c:\Dropbox\Dokumenty\ /XJ /E /R:3 /NP >nul 2>&1

robocopy je příkaz pro pokročilé kopírování (mají W7, XP ne), XJ zakáže kopírovat simlinky (video, obrázky atd.), E zapne rekurzivní kopírování, R omezí počet opakování (ve výchozím nastavení má robocopy 1000000 pokusů…) a NP zakáže ukecaný výstup. Pro jistotu ještě vše hážu do nul (NP a nul není potřeba, to už řeší ten skript vbs).

Simple, dear Watson :-)

4 komentáře na “Jak spustit skript “neviditelně”– zálohujeme na pozadí”

  1. confusion_ napsal:

    nějak mi ta krása nefrčí :)

    http://prntscr.com/g5r3x

    win 7

    • márty napsal:

      jop, oblíbená vychytávka, běží mi tu texy! – zmrší uvozovky na „hezky česky“… (upravil jsem to i v článku, díky)

      ve všech scriptech se používají pouze standardní uvozovky – `“`
      stačí v zkopírovaném skriptu jimi nahradit ty „zmršené“ (typografické) české – „ a “

      • confusion_ napsal:

        Jou, to pomohlo, ani jsem si toho nevšiml, jinak by mě to možna i napadlo,
        ale stále potřebuju ještě trošku něco jiného a to aby terminal spracujici .bat nebyl vidět, ale příkaz, který volá (interakce s uživatelem mimo cmd) už vidět musí jit :) no a v podstaťě ani něco jako echo ahoj >> output.txt v .bat nevytvoří soubor %-) asi dělám něco špatně

        • márty napsal:

          mno, to nepůjde tak snadno… jednoduše řečeno: ten „bat“ spuštěný skriptem nemůže zobrazovat nic mimo „kontejner“, ve kterém běží – to je to „WshShell = Nothing“, tohle slouží ke kompletnímu skrytí před uživatelem.
          to, co potřebuješ ty, by se muselo řešit třeba jako více bat (což je prasárna), nebo to rovnou napsat ve VBS. Já bych to asi sám řešil Pythonem.

Vyštěkat

Můžete použít standardní HTML tagy a taky Texy formátování!