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:
- Perl (Perl za Windows)
- JP Softvare 4Dos (sada besplatan) & TCC / LE (bivši 4NT, sada besplatan) (gotovo moćan kao UNIX shell skripte, ali sa "ukusom"DOS / Windows-a)
- NirCmd besplatna alatka komandne linije
- UNIX alatke portovane na DOS / Windows, na primer, UnxUtils i GNU Win32 ports
- Bash i druge UNIX shells portovane u DOS / Windows, na primer CygWin project. Možda nije potpuno jasno kako postaviti stvari na Cygwin sajt. Ili preuzmite "setup.exe" program, koji će vas voditi kroz sve, ili koristite mirrors page da nađete lokaciju sajta i sve odradite sami.
- AutoIt besplatan skripting i instalacioni jezik za 95, 98, ME, NT4, 2000, XP, Nema vremena izvođenja i može se sastaviti u jedan EXE.
- KixTart (i KixTart skripta biblioteke)
- REXX
- I na internetu postoji još tona drugih besplatnih alatki za skriptovanje za Windows.
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
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):
- Blat "je Win32 alatka komandne linije koja šalje email-ove koristeći SMTP ili NNTP protokole."
- 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."
- 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:
- 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.
- 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.