Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Windows Shell Scripting

Uvod


Termin "shell script" potiče od UNIX -a, DOS-ov termin je "komandne datoteke." UNIX shell skripte su veoma moćne i fleksibilne, u suštini, one su programski jezici za sebe. Windows ili više opravdano DOS komandne datoteke su bleda imitacija. Međutim, ponekad morate da napišete nešto što će raditi na bilo kojoj staroj verziji Windows-a koju neko ima instaliranu - bez dodavanja svih vrsta drugih alata. br>Pre nego što se previše udubite u ovu temu, razmotrite da li postoji neki drugi alat koji možete koristiti. Ovde je spisak alata, daleko moćnijih, fleksibilnijih i verovatno lakših za korišćenje nego komandne datoteke:

Powershell


Ako uopšte pratite Windows svesni ste da Powershell je Microsoft-ov novi alat komandne linije, i da ćete biti u obavezi da ga koristi sve više i više sa novijim verzijama Windovws-a. To je dobra stvar, po mom mišljenju, a samo im je trebalo oko 20 godina da shvate, ali to nije tema ovde! Ja stvarno više ne radim na Windows-u i nisam se potrudio da naučim Powershell, što me neprijatno podseća na verbalnu ružnoću Jave. Dakle, ova strana je po malo i istorijska, iako većina stvari treba da rade najmanje do Win7.

Ukoliko ste zainteresovani za trenutne Windows skripte komandne linije i Powershell (a ako Vam se sviđa Windows trebalo bi da budete zainteresovani), postoji veliki broj drugih resursa i knjiga koje će Vam pomoći. Ove su verovatno dobre, ali ih nisam pročitao:

Tweak (Štipanje)


Da li ste znali da Windows cmd.exe ima fajl i završetak imena priručnika, kao UNIX shell? Ima, i to može biti neverovatno korisno. Ali u većini verzija operativnog sistema Windows se ne podrazumeva. (Verujem da može biti u Windows-u 2003, ali ne mogu da garantujem.)

Da biste omogućili fajl i završetak imena priručnika pod Windows-om, preuzmite Ova fajl registra i uklonite .txt, onda. dvaput kliknite na njega i odgovorite na pitanje sa DA o upisivanju u registar. Ako ga, iz nekog razloga, ne možete preuzeti, možete da kopirate tekst ispod u novu datoteku i upisati je, ili samo otvorite regedit, idite do ključa, i promenite vrednosti zaCompletionChar and PathCompletionChar na 9. Kada ste to uradili, otvorite novi komandni prompt i otkucajte dir c:\win a zatim pritisnite taster TAB i posmatrajte šta se dešava. Naravno gornja strelica i druge funkcije uređivanja komandne linije će i dalje raditi kao i uvek.
REGEDIT4

; NT-TAB.reg -- Sets the NT Command Completion Character to TAB
; Use "RegEdit /s NT-TAB.reg" for silent installations
; v1.0 1998-10-22 JP Vossen  http://www.jpsdomain.org/
; v1.1 2001-09-06 JPV Added PathCompletionChar
; v1.2 2003-03-30 JPV Added .DEFAULT and SOFTWARE sections

[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"CompletionChar"=dword:00000009
"PathCompletionChar"=dword:00000009


; Can also do this if you have the permissions
;[HKEY_USERS\.DEFAULT\Software\Microsoft\Command Processor]
;"CompletionChar"=dword:00000009
;"PathCompletionChar"=dword:00000009

The Dirt (Prljavština)


U redu, ako još uvek želite da nastavite sa ovim, prvo što vam je potrebno je Tim Hilov Windows NT Shell Scripting , inače nemate priliku. Za Windows 9x/ME, još uvek ste slabi, ali za NT/2000 ova knjiga je stvarno super. To je jedini način da se krećete kroz prostor, nedosledno, kontradiktorno i često nadmudrujući "skript" jezik izgrađen u cmd.exe.

Koristeći materijal iz te knjige, plus moje skoro dvadesetogodišnje iskustvo sa DOS komandnim fajlovima, i dalje sam trošio dosta vremena u pisanju sledeće skripte. Sve što Vam ona pruža su neke osnovne informacije o fotografiji (sličano UNIX stat) i govori Vam da li će fajl stati na flopi disk..


Skripte

Klikom na ime skripte otvoriće se novi prozor sa tom skriptom.

Stat v1. 0 2000-12-03

NT komandna datoteka pruža slične informacije na UNIX (file) komandu

nt-cmd.cmd v1.2 2001-08-29

Uzorak / Demo kod koji sam napisao nakon čitanja Windows NT Shell Scripting.

diskovi v1 .1 2000-01-11

mali skript za prikazivanje aktivnih diskova.




Jednostavno spavanje


Još jedan od brojnih alata koji nedostaje je komanda ednostavnog ”spavanja”, ali to možete lako da lažirate koristeći "ping" komandu (fijukanje) za sve. Sledeći će "spavati" oko 5 sekundi, dajte ili uzmite:

C:\> ping -n 5 localhost > NUL

Očigledno je da Vi po potrebi podesite 5 za broj sekundi. Možete čak i da napišete trivijalnu funkciju "spavanja" u Vaš skript.

@echo off
REM sleep_demo.cmd--Simple "sleep" command demo
REM 2012-07-26

echo Before sleep
call :sleep 7
echo After sleep

REM End of Main program
REM ###################################################################
goto :EOF

REM +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
REM sleep for a specified number of seconds, more-or-less...
REM Called like:  call :sleep 7
:sleep
    set sleep_secs=%1
    ping -n %sleep_secs% localhost > NUL
goto EoF



Datum

Kako dobiti i koristiti datume i vremena u Windows skripti.


Ovo je trivijalno lako u UNIX-u. Želite da kopirate datoteku dnevnika na ime zastarele? "cp mylog `date '+%Y-%m-%d'`-mylog" će kopirati mylog na 2002-11-27 (od ovog pisanja). Šta može biti jednostavnije? Međutim, u Windows-u, to nije dobro.

Postoje dva osnovna načina da se dođe do ovoga, oba imaju svoje prednosti i mane. Originalni način je "za" i "datum / t" komande ("for" i "date /t" ) pod NT/2000/XP. To se ne radu u Windows 9x, i ne koriste se uvek cifre 2 polja vremena, što Vas potpuno uništi ako Vam je potrebno vreme. Drugi način je da koristite datum komandu UNIX-a, onda radite šta god želite. Ona je veoma fleksibilna, ali zahteva da je preuzmete i imate izvršnu (datum) alatku. Takođe ćete želeti da joj promenite ime (ja koristim udate.exe) tako da ne dolazi u sukob sa ugrađenom komandom datuma.

AŽURIRANJE (2012-07-26): Sve verzije Unix "datum" komandi koje sam testirao i u WinXP i Win7 imaju bug koji izaziva da ih preskočite preskočite 11. januar i / ili 04. mart! To prilično nervira, ali nikada nije popravljeno, koliko ja znam. Budući da utiče na obe alatke koje sam testirao (UnxUtils i GNU Win32), pretpostavljam da je Windows strftime lib problem. Ali ne mogu to dokazati. A neko drugi je odgovorio da greška ne može da reprodukuje problem. Zato bih rekao da je to nešto što ja radim, ali nalazim da i WinXP koji koristim godinama i mnogo noviji Win7 čine istu stvar.

AŽURIRANJE (2003-06-07): Evo ga treći način koji je trivijalan. Izgleda da postoje ugrađene ali nedokumentovne promenljive okruženja % vreme% i%datum% u Windows-u 2000. Nisam testirao druge platforme (javite mi ako Vi jeste). Zbog formata, ne možete lako koristiti datum u operacijama kopiranja fajla (na primer), ali vreme bi trebalo da bude u redu. A to je i daleko najlakša opcija ako ćete samo da je prikažete (pisanje u log fajl ili tako nešto).

C:\> echo %date% %time%
Sat 06/07/2003 18:32:30.52

Trivijalni Windows

@echo off
REM Play with W2K date/time env. vars.

echo The date: %date%
echo The time: %time%


AŽURIRANJE (2006-05-11): Evo ga još jedan trivijalan način. Zahvalite Ričardu Blejku (RBlake {at} nea {DOT} org) za ovaj veliki hack. Pored navedenih varijabli % vreme% i%datum% , postoji i %VAR:offset,len% konstruktivni dokument za SET komande, koji radi svugde. Kao što je gore navedeno, upotreba dvocifrenog vremenskog koda može da Vam zakomplikuje, ali samo za datum radiće veoma dobro. Kod koji se bavi ne nula tapaciranim satima se ostavlja kao vežba za čitaoca.
C:\tmp> set MyNewFileName=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%

C:\tmp> echo %MyNewFileName%
20060511 21921

Članak RedmondMag.com Backup Basics in Windows Server 2008 R2 govori o istim načinima rada, ali oni nisu prenosni jer zavise od toga kako Vaš sistem prikazuje vreme, i da li će se razlikovati od mašine do mašine na osnovu lokalnih preferenci i preferenci korisnika. Na primer, ja mrzim svaki oblik datuma / vremena, osim za ISO8601 tako da imam svoje Windows formate skoro baš tako postavljene, što zatim razbija pretpostavke u prvom bloku:
@echo off
REM date_demo.cmd--Simple date parsing demo
REM 2012-03-10

echo Current dates (Windows default date format for US)
set year=%date:~10,4%
set month=%date:~4,2%
set day=%date:~7,2%
set hour=%time:~0,2%
set min=%time:~3,2%
set sec=%time:~6,2%
echo Date: %date% Time: %time%
echo ISO-8601: %year%-%month%-%day%_%hour%:%min%:%sec%

echo.
echo Current dates (ISO-8601 date format)
REM 2012-03-10
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set hour=%time:~0,2%
set min=%time:~3,2%
set sec=%time:~6,2%
echo Date: %date% Time: %time%
echo ISO-8601: %year%-%month%-%day%_%hour%:%min%:%sec%

Drugi načini


windate v1.0 negde u 2001 ili 2002 Prirodne Windows komande datuma
unixdate v1.0 negde u 2001 ili 2002 Korišćenje UNIX komandi datuma u Windows-u


Dobijanje ulaznih jedinica


Postoje razne alatke kao što ask.exe i choice.exe koje Vam omogućavaju da dobijete ulazne jedinice. Tu postoji još lakši, iako nedokumentovan, način: skup / P Kao u:
set /P MyAnswer=Your Prompt Here!

To govori korisniku "Vi suflirate ovde!" i stavlja sve što otkucate u %MyAnswer%. Veoma kul.


Jednostavne usluge


Osim FindZero.bat, sve ove komandne datoteke će raditi u DOS-u, ili bilo kom Windows-u.
  • DOS komande nisu osetljive na velika i mala slova, za razliku od Unix komandi.
  • "@" kao prvi karakter u liniji sprečava komandu da se ponavlja bilo da je eho uključen ili isključen
  • echo. će ponovitii prazan red (CRLF).
  • Komande linije parametra su određene sa %1, %2, itd. ne sa $1, $2 kao u UNIX-u.
  • %0 je ime programa , kad se poziva. Drugim rečima, ako otkucate "mybatch" %0 će biti "mybatch". Ako ste otkucali "c:\utils\mybatch.bat" %0 će biti "c:\utils\mybatch.bat".
  • ^G je'kontrola G' koja čini da konzola daje zvučni signal. Ovaj mali komandni fajl ima ^G in in, koji možete da isečete i nalepite u skripti. Postoji mnogo drugih načina da se dođe kontrolnih karaktera u fajlovima, ali oni zavise od vašeg OS-a i uređivanja teksta. U većini DOS prozora, držeći pritisnut taster <ALT>dok kucate ASCII kod na numeričkoj tastaturi će proizvesti taj karakter. ^ G je 007, Vi držite <ALT>, kucate 007 na numeričkoj tastaturi, a zatim pustite <ALT>da bi dobili zvučni signal.
  • Tim Hilov Windows NT Shell Scripting ima mnogo više informacija i detalja. Veći deo knjige se odnosi na DOS i Windows (osim NT).

AddPath.bat

@path=%1;%path%

MCD.bat

@md %1
@cd %1

auto-ftp v1.2 1999-09-16


Automatski preuzmite datoteku koristeći FTP (nije bezbedno!)

CLR.bat

@echo off
cd c:\
cd d:\
c:
cls
ver

aformat v2.4 2002-11-09


Oblikovanje flopi bez obaveštenja korisnika.

SPrompt.bat


Zahteva ANSI.sys koji se nalazi u DOS i Windows, ili PC magazinov besplatan AnsiCom.
@echo off
REM SPrompt.bat -- Dynamically Set Prompt
REM Created sometime in 1992
REM 03-Mar-1998 JPV
REM 19-Feb-1999 JPV Added "neat" prompt from JPS mail list

REM Neat PROMPT `$+[%user@$P]%@EXECSTR[if %@LEN[%_CWD] GT 20 ECHOS $_:$s]`

prompt $e[0;33;1;44m$P$e[36;44m$G $e[0;37;44m
if not "%1" == "" prompt $e[32;1m%1 %2 %3 %4 %5 %6 %7 %8 %9$_$e[33m%prompt%
rem prompt $e[s$e[1;7f$e[0;45;37;1m$e[K($z)   $d   $t$e[u$e[1m$P$e[0m$G $e[0m
rem set WINPMT=$e[0;33;1;44mEXIT to Windows$_$P$e[36;44m$G $e[0;37;44m
if {%OS%}=={Windows_NT} prompt $P$G

WhoAmI.bat


Zahteva da bude instalirano i aktivano Microsoft umrežavanje (Microsoft Networking), i DOS-ova komanda za traženje. Ako imate UNIX komandu za traženje na putu, verovatno ćete dobiti grešku "Nema takve datoteke ili direktorijuma".
@echo off
echo.
net config /yes | find "name"
echo.
pause



Slanje imejla


Još nešto što se uzima zdravo za gotovo u UNIX-u je mogućnost da pošaljete imejl (e-mail) sa komandne linije ili skripta. Kao i obično, Windows čini ovo izazovom. Postoji nekoliko besplatnih i komercijalnih rešenja za to, uključujući ali ne ograničavajući se na sledećoj listi (ako ste ikada koristili Blat):
  1. Blat "je Win32 alatka komandne linije koja šalje email-ove koristeći SMTP ili NNTP protokole."
  2. NTsendmail " je veoma hvaljena Sendmail zamena UNIX-a za NT. NTsendmail je objavljen pod GNU javnom licencom. NTsendmail je dizajniran da omogući filmskim stvaraocima da koriste svoj UNIX CGIs na Windows 95/98/NT/2000."
  3. I siguran sam da postoji bar jedan ili dva Perl modula koji mogu da urade ovo.



Učitavanje iz Frontpage na Vaš ISP


Nekada sam koristio MS FrontPage da održavam ovaj sajt (ne pitajte me zašto). Moj stari IS, nije podržavao FrontPage ili njegova proširenja, zbog odličnih bezbednosnih razloga. Korišćenje FrontPage za kreiranje stranica, a zatim prebacivanje na domaći sajt je gigantski davež zbog načina na koji FrontPage drži sve njene informacije u različitim "_VTI_CNF" i drugim poddirektorijumima. Pa jednostavno zatvaranje direktorijuma i ostavljanje na hostu nije dobra ideja. Tako sam došao do sledećeg rešenja.

Stari kod koji sam poslao na Netaxs news group nije bio na pravom mestu. OVA stvar radi.

Ne koristim to više, ja koristim GenSite.pl i rsync.

Otvorena pitanja su:
  1. Ako radite ZIP, i učitate ga, ali ga ne izbrišete sa računara, sledeći pokretanje će se dodati, a ne zameniti. Vaš "diff" zip će samo da raste. Potrebno je ručno obrisati zip datoteku posle svakog uspešnog pokretanja.
  2. Pošto radi nevezano za modifikaciju vremena, ako premestite datoteku u strukturu koja nije modifikovana (na primer alat ili uslužni program) diff ga neće prepoznati. To morate ručno dodati u zip.
upload.cmd v1.0 2000-12-14
   Učitava .bat na mojoj Windows radnoj stanici, i kreira ZIP fajl koji mogu da učitam ali ne dobija glupe "_VTI_CNF" direktorijume!
upload.sh v1.1 2001-01-24
   Otvara upload.zip i postavlja dozvole na www direktorijum.


Windows Scripting izvori


Vremenom ću dodavati više na ovoj stranici.Ako imate konkretno pitanje, javite mi, možda mogu da pomognem.




Published (Last edited): 30-07-2012 , source: http://www.jpsdomain.org/windows/winshell.html