Windows ცვლადები ბრძანების ხაზზე. ძირითადი cmd ბრძანებები - მხოლოდ სასარგებლო ინფორმაცია

საკუთარი ცვლადების გამოცხადება თითქმის ნებისმიერი პროგრამირების ენის განუყოფელი ნაწილია, ამიტომ vbscript ენაში ისინი გამოცხადებულია საკვანძო სიტყვის გამოყენებით. დაბნელებული, და jscript-ში გამოიყენება საკვანძო სიტყვა ვარ.

Windows-ის ბრძანების ხაზის ცვლადები ბუნებით ოდნავ განსხვავებულია, თქვენ არ შეგიძლიათ გამოაცხადოთ cmd ცვლადების ჯგუფი, ან ერთდროულად დაასახელოთ რამდენიმე ცვლადი ბრძანების ხაზზე. მოდით შევხედოთ კოდის შემდეგ ხაზებს:

ექო % Var3% ექო % VAR3% ექო % vAr3%

ერთი წერტილი, რომელიც გასათვალისწინებელია არის ჩანაწერი

კომპლექტი var1 =100
კომპლექტი var1 = 100

ეს არ არის იგივე, ანუ პირველ შემთხვევაში ვქმნით cmd ცვლადს "var1", ხოლო მეორეში - "var1". ანალოგიური სიტუაციაა მნიშვნელობების მინიჭებასთან დაკავშირებით, ამიტომ ყურადღება მიაქციეთ სივრცეს!!!

ჩვენ ვხედავთ, რომ ჩვენ შეგვიძლია გამოვხატოთ ცვლადის მნიშვნელობა ფუნქციის გამოყენებით ექო, ჩვენ ვამაგრებთ მას "%" სიმბოლოში კომპლექტი– ჩვენ უბრალოდ ვწერთ მის სახელს, ასევე ღირს იმის გათვალისწინება, რომ ყველა ცვლადს ენიჭება სტრიქონის ტიპი.

თუ აწარმოებთ cmd set ბრძანებას, რომელიც აჩვენებს ყველა ცვლადის სიას და მათ მნიშვნელობებს მიმდინარე სესიაზე, ნახავთ, რომ ახლად შექმნილი cmd ცვლადები და . ჩვენ შევძლებთ მათზე წვდომას მთელი სესიის განმავლობაში.

Windows ბრძანების სტრიქონში ცვლადების გასასუფთავებლად მათი შინაარსისგან, თქვენ უბრალოდ უნდა მიაკუთვნოთ ცარიელი მნიშვნელობა:

უბრალოდ დაბეჭდავს ხაზს %Var3% და ბრძანებას

ამ მაგალითში, ჩვენ გავურბივართ სიმბოლოებს & და ^, რითაც მივაკუთვნეთ ფრაზები:

"100 & 3 = 5"
"100 ^3"

აღსანიშნავია, რომ თუ ჩვენ შევეცდებით ამ ცვლადების მნიშვნელობების ჩვენებას cmd set ფუნქციის გამოყენებით, მაშინ პრობლემები არ იქნება, მაგრამ თუ გამოვიყენებთ echo ფუნქციას, მივიღებთ სრულიად განსხვავებულ შედეგს, ვიდრე ველოდით. ასე რომ, როდესაც ცდილობთ შემდეგი ბრძანების გაშვებას:

ახლა კოდის შესრულებისას:

ექო %var4% ექო %var5%

ყველაფერი კარგად წავა.

ნათელია, რომ მიმდინარე ბრძანების ფანჯარაში შექმნილი cmd ცვლადები არ არის ხელმისაწვდომი სხვა პროცესებისთვის, მაგრამ შესაძლებელია კიდევ უფრო დიდი შეზღუდვების დაყენება.

ადგილობრივი მასშტაბის დასაყენებლად გამოიყენეთ ბლოკი SETLOCAL...ENDLOCAL. ამ ბლოკის შუაში გამოცხადებული ყველა Windows ბრძანების ხაზის cmd ცვლადი არ იქნება ხილული მის გარეთ. გახსენით რედაქტორი (მე ვიყენებ რედაქტორს Notepad ++, რადგან ის დაუყოვნებლივ ხაზს უსვამს კოდს) და ჩაწერეთ მასში კოდის შემდეგი სტრიქონები:

ჩვენ ვხედავთ, რომ ჯერ გამოვაცხადეთ var1 და მივანიჭეთ მნიშვნელობა 0, შემდეგ კვლავ გამოვაცხადეთ ცვლადი იმავე სახელით, მაგრამ ბლოკში SETLOCAL...ENDLOCAL. სკრიპტი გამოაქვს როგორც ლოკალური, ისე გლობალური var1-ის მნიშვნელობას. მე სპეციალურად გამოვიყენე ლათინური ასოები, რომ თუ რამე მოხდა, არ დაგეზაროთ.

    გუნდი SETგამოიყენება Windows ბრძანების სტრიქონში გარემოს ცვლადების სანახავად და შესაცვლელად. გარემოს ცვლადები არის ცვლადები, რომელთა მიღებული მნიშვნელობები ახასიათებს გარემოს, რომელშიც მუშაობს მიმდინარე პროგრამა - სისტემის ფაილების ბილიკები, ტექნიკის ინფორმაცია, მომხმარებლის დირექტორიები და ა.შ. გარემოს ცვლადის მნიშვნელობები წარმოიქმნება Windows-ის ჩატვირთვისას, მომხმარებელი სისტემაში შესვლისას, ინდივიდუალური პროცესების გაშვებისას ან ბრძანების გამოყენებისას. SET. კონკრეტული ცვლადის მიერ მიღებული მნიშვნელობის სანახავად შეგიძლიათ გამოიყენოთ ბრძანება:

SET ცვლადი
ბილიკის დაყენება- ცვლადის მნიშვნელობის ჩვენება ბილიკი
ახალი ცვლადის შესაქმნელად ან არსებულის მნიშვნელობის შესაცვლელად გამოიყენეთ ბრძანება:

SET ცვლადი=სტრიქონი

ცვლადი- გარემოს ცვლადის სახელი.
ხაზი- სიმბოლოების სტრიქონი, რომელიც მინიჭებულია მითითებულ ცვლადზე.

SET MyName=Vasya- დააყენეთ ცვლადის მნიშვნელობა Ჩემი სახელი

SET path=C:\progs;%path%- შეცვალეთ ცვლადის მნიშვნელობა ბილიკიხაზის დასაწყისში დამატებით C:\progs

ცვლადის მიერ მიღებული მნიშვნელობა ხელმისაწვდომია ბრძანების ფაილებში დასამუშავებლად მისი სახელის გამოყენებით, რომელიც ჩართულია პროცენტის ნიშნებში - % . მაგალითად, ბრძანება ECHO ეკრანზე ტექსტის ჩვენების სახით:

ECHO თარიღი- გამოჩნდება სიტყვა "თარიღი" და ბრძანება
ECHO %date%აჩვენებს ცვლადის მნიშვნელობას თარიღი, ე.ი. მიმდინარე თარიღი ოპერაციული სისტემის ფორმატში.

გუნდი SETპარამეტრების გარეშე გამოიყენება გარემოს ცვლადების მიმდინარე მნიშვნელობების საჩვენებლად.

ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Usr\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=TEST7
ComSpec=C:\windows\system32\cmd.exe
FP_NO_HOST_CHECK=არა
HOMEDRIVE=C:
HOMEPATH=\Users\Usr
LOCALAPPDATA=C:\Users\Usr\AppData\Local
LOGONSERVER=\\TEST7
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
გზა=C:\windows\system32;C:\windows;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS; .VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 3 Step 4, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0304
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\windows\system32\Windows PowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SystemDrive=C:
SystemRoot=C:\windows
TEMP=C:\Users\Usr\AppData\Local\Temp
TMP=C:\Users\Usr\AppData\Local\Temp
USERDOMAIN=test7
USERNAME=სრ
USERPROFILE=C:\Users\Usr
windir=C:\windows

SET ბრძანების გამოძახებისას სიაში ნაჩვენები ცვლადების გარდა, არის სხვებიც, რომელთა მნიშვნელობები დინამიურად იცვლება:

%CD%- იღებს მიმდინარე დირექტორიას მნიშვნელობას.
%DATE%- იღებს მიმდინარე თარიღის მნიშვნელობას.
%TIME%- იღებს მიმდინარე დროის მნიშვნელობას.
%შემთხვევითი%- შემთხვევითი რიცხვის მნიშვნელობა 0-დან 32767-მდე დიაპაზონში.
%ERRORLEVEL%- ERRORLEVEL-ის მიმდინარე მნიშვნელობა, სპეციალური ცვლადი, რომელიც გამოიყენება როგორც პროგრამის შესრულების შედეგის მითითება.
%CMDEXTVERSION% CMD.EXE გაფართოებული ბრძანების დამუშავების ვერსიის ღირებულება.
%CMDCMDLINE%- აფართოებს თავდაპირველ ბრძანების ხაზს, რომელსაც ეწოდება shell.

თუ SET ბრძანების გამოძახებისას მიუთითებთ სახელის მხოლოდ ნაწილს, გამოჩნდება ცვლადების სია, რომელთა სახელები იწყება მითითებული სტრიქონით. Მაგალითად:

SET U- აჩვენებს ყველა ცვლადის მნიშვნელობებს, რომელთა სახელები იწყება "U"-ით.

SET ბრძანება მხარს უჭერს ორ დამატებით გადამრთველს:

SET /A გამოხატულება

SET /P ცვლადი=

გადამრთველი /A მიუთითებს, რომ ტოლობის ნიშნის მარჯვნივ მდებარე სტრიქონი არის რიცხვითი გამოხატულება, რომლის მნიშვნელობაც ფასდება. გამოხატვის ძრავა ძალიან მარტივია და მხარს უჭერს შემდეგ ოპერაციებს, რომლებიც ჩამოთვლილია პრიორიტეტის კლებადობით:

ნებისმიერი ლოგიკური ან ორობითი ოპერატორის გამოყენებისას თქვენ უნდა ჩართოთ გამოხატვის სტრიქონი ბრჭყალებში. ნებისმიერი არაციფრული სტრიქონი გამონათქვამში განიხილება როგორც გარემოს ცვლადის სახელები, რომელთა მნიშვნელობები გამოყენებამდე გარდაიქმნება რიცხვით ფორმაში. თუ ცვლადი მითითებული სახელით არ არის განსაზღვრული სისტემაში, მის ნაცვლად შეიცვლება null მნიშვნელობა. ეს საშუალებას გაძლევთ განახორციელოთ არითმეტიკული ოპერაციები გარემოს ცვლადის მნიშვნელობებზე მნიშვნელობების მისაღებად % ნიშნების შეყვანის გარეშე. თუ SET /A გამოიძახება ბრძანების სტრიქონიდან და არა სერიული ფაილიდან, ის ბეჭდავს გამოხატვის საბოლოო მნიშვნელობას. გარემოს ცვლადის სახელი უნდა გამოჩნდეს ნებისმიერი მინიჭების ოპერატორის მარცხნივ. რიცხვითი მნიშვნელობები განიხილება როგორც ათობითი, თუ მათ წინ არ უძღვის პრეფიქსი:

0x- თექვსმეტობითი რიცხვებისთვის
0 - რვავიანი რიცხვებისთვის.

პრეფიქსების გამოყენების მაგალითი:

SET /A REZ=0xA+012
ECHO %REZ%

ამ ჯგუფურ ფაილში ცვლადის მნიშვნელობა არის REZგამოითვლება თექვსმეტობით გამოსახული რიცხვის 10 (0xA) და ოქტალში წარმოდგენილი რიცხვის 10 (012) დამატებით.

/P შეცვლა საშუალებას გაძლევთ დააყენოთ ცვლადის მნიშვნელობა მომხმარებლის მიერ შეყვანილი შეყვანის სტრიქონისთვის. აჩვენებს მითითებულ promptString მოთხოვნას შეყვანილი სტრიქონის წაკითხვამდე. promptString მოთხოვნა შეიძლება ცარიელი იყოს. ეს ღილაკი საშუალებას გაძლევთ მოაწყოთ დიალოგი მომხმარებელთან პარტიულ ფაილში:

@ECHO OFF
SET /P NAME=შეიყვანეთ მომხმარებლის სახელი:
SET /P pass=შეიყვანეთ პაროლი:
ECHO მომხმარებლის სახელი - %NAME% , პაროლი - %PASS%

სერიულ ფაილებში ხშირად გჭირდებათ მუშაობა ცვლადის მიერ აღებული მნიშვნელობის ნაწილთან, რისთვისაც იყენებთ ჩანაცვლების მნიშვნელობებს:

ცვლადი:string1=string2- ცვლის ცვლადის მიღებულ მნიშვნელობაში ხაზი 1 on ხაზი 2

შემდეგი სერიული ფაილი იყენებს წერტილის სიმბოლოს ცვლადის მნიშვნელობას, რომელიც შეესაბამება მიმდინარე თარიღს:

@ECHO OFF
დაყენება tm=%DATE%
ECHO Date1 = %tm%
SET tm=%DATE:.=-%
ECHO Date2 = %tm%

ცვლადის მიერ აღებული მნიშვნელობის ნაწილის გამოსაყოფად გამოიყენება შემდეგი კონსტრუქცია:

ცვლადი:~x,y- სად x- გამოტოვებული სიმბოლოების რაოდენობა ხაზის დასაწყისიდან და - ცვლადის მნიშვნელობად გამოყენებული სიმბოლოების რაოდენობა.

შემდეგი მაგალითი იყენებს მიმდინარე დროის ჩვენებას წამებისა და წამების წილადების გარეშე (მხოლოდ პირველი 5 სიმბოლო TIME ცვლადის სტანდარტული მნიშვნელობიდან):

@ECHO OFF
დააყენეთ tm=%TIME%
ECHO დრო1 = %tm%
SET tm=%TIME:~0.5%
ECHO დრო2 = %tm%

თუ ღირებულება (სიგრძე) არ არის მითითებული, მაშინ გამოიყენება ცვლადის მნიშვნელობა, რომელიც რჩება სტრიქონის ბოლომდე. თუ ღირებულება არის უარყოფითი, შემდეგ გამოიყენება ბოლოდან ცვლადის მნიშვნელობის სტრიქონის ნაწილი. წინა მაგალითი შეიძლება შეიცვალოს, რათა დაზუსტდეს, რომ მიღებული დროის მნიშვნელობა ჩამოშორებულია 6 სიმბოლოთი ბოლოდან:

@ECHO OFF
დააყენეთ tm=%TIME%
ECHO დრო1 = %tm%
SET tm=%TIME:~0.-6%
ECHO დრო2 = %tm%

შესაძლებელია გამოიყენოთ ხარვეზების რაოდენობა არ არის მითითებული და გამოიყენება უარყოფითი რიცხვი, მაშინ მიღებული მნიშვნელობა იქნება ცვლადის ნაწილი ხაზის ბოლოდან:

%PATH:~-10%- ამოიღებს PATH ცვლადის ბოლო 10 სიმბოლოს

თქვენ შეგიძლიათ გამოტოვოთ null მნიშვნელობა ჩანაცვლების ფორმატის შენარჩუნებისას:

%PATH:~0.-2%ექვივალენტი %PATH:~,-2%

ბრძანების ფაილებში გარემოს ცვლადების გამოყენებისას, არსებობს გარკვეული შეზღუდვა, რომელიც დაკავშირებულია იმ ფაქტთან, რომ მინიჭებული მნიშვნელობა რჩება უცვლელი, როდესაც ის იცვლება ფრჩხილებში მითითებულ ბრძანებების ჯგუფში, მაგალითად, ბრძანებებში. თუან FOR. ამ შეზღუდვის გვერდის ავლით, გაუშვით ბრძანების პროცესორი /V:ON პარამეტრით და გამოიყენეთ ძახილის ნიშნები პროცენტული ნიშნების ნაცვლად, რათა მიიღოთ ცვლადის მიერ მიღებული მნიშვნელობა. გარდა ამისა, შესაძლებელია ბრძანების პროცესორის სტანდარტული გაშვების გამოყენება, მაგრამ ამ რეჟიმის ლოკალური გააქტიურებით ბრძანებით:

ცვლადი მნიშვნელობების გამოყენების შედეგებში განსხვავება საკმაოდ ნათლად არის ნაჩვენები შემდეგი სურათების ფაილით:


@ECHO OFF
დააყენეთ VAR=ადრე
თუ "%VAR%" == "ადრე" (
დააყენეთ VAR=შემდეგ
თუ "!VAR!" == "after" @echo პროცენტული ნიშნით=%VAR% , კითხვის ნიშნით=!VAR!

გუნდი დააყენეთ VAR=შემდეგშესრულებულია ფრჩხილებით გამოყოფილი ქვეპროგრამის შიგნით და თუ ბრძანება ამოღებულია Setlocal EnableDelayedExpansionან არ გამოვიყენოთ ცვლადის მნიშვნელობის მისაღებად VARძახილის ნიშნები, მისი მნიშვნელობა დარჩება ძველზე (რაც იყო მითითებული ქვეპროგრამაში შესვლამდე). მსგავსი პრობლემა ჩნდება, როდესაც ცვლადის მნიშვნელობა იცვლება ბრძანების ციკლში. FOR. მაგალითად, მიმდინარე დირექტორიაში ფაილების სიის მისაღებად, ასეთი სერიული ფაილი არ იმუშავებს:

დააყენეთ LIST=
%%i-სთვის (*) დააყენეთ LIST=%LIST% %%i
ექო %LIST%

ცვლადი მნიშვნელობა სიაარ შეიცვლება მარყუჟის შიგნით. იმისათვის, რომ ეს მოხდეს, სერიული ფაილი უნდა შეიცვალოს შემდეგნაირად:

Setlocal EnableDelayedExpansion
დააყენეთ LIST=
%%i-სთვის (*) დააყენეთ LIST=!LIST! %%მე
ექო %LIST%

ახლა, ცვლადის მნიშვნელობა სიამარყუჟის შიგნით FORშეიცვლება, თანმიმდევრულად მიიღებს ფაილების სახელების მნიშვნელობებს, რომლებიც გამოყოფილია სივრცეში ( დააყენეთ LIST=!LIST! %%მე)

ამ სტატიაში:

  • ცვლადების განსაზღვრა
  • ბრძანების ხაზის ცვლადები (bat ფაილის გამოძახების პარამეტრები)
  • IF პირობითი ოპერატორი
  • ფუნქციები
  • დაბრუნების მნიშვნელობების გამოყენება (გასვლის კოდის დამუშავება)

ცვლადების განსაზღვრა

SET<Имяпеременной>=<Значениепеременной>

SET განცხადება არის ოპერაციული სისტემის პარამეტრებით მანიპულირების უნარის გაფართოება. ის განსაზღვრავს ცვლადს, რომლის მნიშვნელობაც ენაცვლება მის სახელს, როდესაც ეს სახელი გამოიყენება პროცენტულ ნიშნებს შორის. ასე რომ, თუ მოცემულია (ცვლადი, რომელსაც მოითხოვს ბევრი თამაში, რომელიც იყენებს კომპიუტერის ხმის ბარათს):

SET BLASTER=A220 I5 D1 P330

შემდეგ, როდესაც იყენებთ შემდეგ კონსტრუქციას სერიულ ფაილში:

ECHO %BLASTER%

ეკრანზე გამოჩნდება "A220 I5 D1 P330". SET განცხადების გამოყენებით განსაზღვრულ ცვლადებს ეწოდება გარემოს ცვლადები და ხილული იქნება შესრულების შემდეგ, სანამ DOS არ გადაიტვირთება (თუ ხელით არ შეიცვლება მეხსიერებაში). ანუ, მისი გამოყენება შესაძლებელია ერთი სერიული ფაილიდან ან პროგრამიდან მეორეში მითითებულის შემდეგ. ყველაზე ცნობილი არის PATH ცვლადი, რომელიც წარმოადგენს ბილიკების ერთობლიობას ფაილების სწრაფად მოსაძებნად. ის დაყენებულია autoexec.bat ფაილში.

ბრძანების ხაზის ცვლადები
(პარამეტრები bat ფაილის გამოძახებისთვის)

%<цифра 0-9>

როგორც ნებისმიერ ენაში, სერიული ფაილის ენაშიც შესაძლებელია bat ფაილის პარამეტრებად მიღებული ცვლადების გამოყენება.

სულ შეიძლება იყოს 10 ერთდროულად არსებული დამოუკიდებელი ცვლადი. ეს საკმაოდ მცირეა რთული პროგრამების დასაწერად, თუმცა 3-4 ხშირად საკმარისია ჩვეულებრივი სამუშაოსთვის. ცვლადის მნიშვნელობა უდრის ბრძანების სტრიქონიდან შესაბამისი პარამეტრის მნიშვნელობას. %0 ცვლადი შეიცავს .bat ფაილის სახელს და თუ თქვენ მიუთითეთ, მისკენ მიმავალ გზას. ანუ, თუ თქვენ გაუშვით abc.bat ფაილი შემდეგი პარამეტრებით:

abc.bat a bc def

მაშინ ცვლადი %0 შეიცავს abc.bat მნიშვნელობას, %1 შეიცავს მნიშვნელობას a, %2 შეიცავს bc და %3 შეიცავს def. ეს თვისება ფართოდ გამოიყენება მრავალმხრივი სერიული ფაილების შესაქმნელად, განმეორებადი ოპერაციების დროს.

ბრძანების ხაზიდან 10-ზე მეტი ცვლადის მისაღებად, შეგიძლიათ გამოიყენოთ SHIFT ბრძანება.

SHIFT ბრძანება საშუალებას გაძლევთ გამოიყენოთ 10-ზე მეტი ბრძანების პარამეტრი, თუმცა, შესაბამისი ადრინდელი პარამეტრები იკარგება. სხვა სიტყვებით რომ ვთქვათ, SHIFT ბრძანება ცვლის ყველა ცვლადის მნიშვნელობას ერთი ნაბიჯით მარცხნივ. ანუ, ცვლადი %0 შეიცავს მნიშვნელობას, რომელიც ადრე შეიცავდა ცვლადში %1 და ცვლადი %1 შეიცავს %2 ცვლადის მნიშვნელობას ცვლამდე. თუმცა, ეს ოპერაცია შეუქცევადია, ანუ შეუძლებელია ცვლადების უკან გადატანა.

IF პირობითი ოპერატორი

საბედნიეროდ, თანამედროვე Windows 2000-ის და უფრო გვიანდელი ბრძანებების cmd.exe თარჯიმანი მხარს უჭერს ბრძანების ბლოკებს განშტოების კონსტრუქციებში, რაც გამორიცხავს IF-ების საჭიროებას ეტიკეტებით. ბრძანების ბლოკები ჩასმულია ფრჩხილებში. ეს ასე გამოიყურება (C/C++ ჩაღრმავების სტილის იმიტაცია):

თუ მდგომარეობა (

"მაშინ" ფილიალის Rem ბრძანებები

რემ...

) სხვა (

"სხვა" ფილიალის Rem ბრძანებები

რემ...

კონკრეტული გამოყენების მაგალითი:

@echo გამორთულია

დააყენეთ BUILDMODE=%1

თუ "%BUILDMODE%" == "" (

Echo FAIL: არგუმენტი საჭიროა ^(--გამართვა, --გამოშვება^)

გასვლა /b 1

rem ამოიღეთ ყველა დეფისი არგუმენტიდან დამუშავების გასამარტივებლად

დააყენეთ BUILDMODE=%BUILDMODE:-=%

თუ "%BUILDMODE%" == "გამართვა" (

დააყენეთ CCFLAGS=/Od /MDd /Z7

) სხვა (

დააყენეთ CCFLAGS=/O2 /MD

ჩემი აზრით, ამით ცხოვრება სავსებით შესაძლებელია. მაგრამ, როგორც ყოველთვის, ცხოვრება არც ისე მარტივია, როგორც ჩანს. ერთი პრობლემაა. მაშინ და სხვა ბლოკებში გამოყენებული ცვლადები ფართოვდება ბლოკების შესრულების დაწყებამდე და არა შესრულების დროს. მოცემულ მაგალითში ეს არ იწვევს რაიმე პრობლემას, მაგრამ შემდეგში ეს იქნება:

თუ "%BUILDMODE%" == "გამართვა" (

Echo INFO: გამართვის გარემოს რეჟიმის დაყენება

დააყენეთ OPTFLAGS=/ოდ

დააყენეთ CCFLAGS=%OPTFLAGS% /MDd /Z7

) სხვა (

Echo INFO: გარემოს გათავისუფლების რეჟიმის დაყენება

დააყენეთ OPTFLAGS=/O2

დააყენეთ CCFLAGS=%OPTFLAGS% /MD

მთავარი ის არის, რომ ორივე ბლოკში, OPTFLAGS ცვლადის ჩანაცვლება მოხდება მანამ, სანამ ის შეიცვლება ამ ბლოკის შესრულებისას. შესაბამისად, CCFLAGS შეივსება იმ მნიშვნელობით, რომელიც OPTFLAGS-ს ჰქონდა ამის შესრულების დროს, თუ ბლოკი დაიწყო.

ეს პრობლემა მოგვარებულია დაგვიანებული ცვლადის გაფართოების გამოყენებით. ცვლადები შეიცავს !…! %...%–ის ნაცვლად მათი მნიშვნელობა მხოლოდ პირდაპირი გამოყენების მომენტში გამოვლინდება. ეს რეჟიმი ნაგულისხმევად გამორთულია. თქვენ შეგიძლიათ ჩართოთ იგი /V:ON გადამრთველის გამოყენებით cmd.exe-ზე დარეკვისას, ან ბრძანების გამოყენებით:

თავად bat ფაილის ტექსტში. მეორე მეთოდი ჩემთვის უფრო მოსახერხებელი მეჩვენება - არც ისე მაგარია მოითხოვო ვინმესგან შენი სკრიპტის გაშვება გარკვეული პარამეტრით.

ამის გათვალისწინებით, წინა "არასწორი" მაგალითი შეიძლება ასე გამოსწორდეს:

setlocal ჩართვა დაგვიანებული გაფართოება

თუ "%BUILDMODE%" == "გამართვა" (

Echo INFO: გამართვის რეჟიმის გარემოს დაყენება

დააყენეთ OPTFLAGS=/ოდ

დააყენეთ CCFLAGS=!OPTFLAGS! /MDd /Z7

) სხვა (

Echo INFO: გამოშვების რეჟიმის გარემოს დაყენება

დააყენეთ OPTFLAGS=/O2

დააყენეთ CCFLAGS=!OPTFLAGS! /MD

ახლა ეს თითქმის სრულფასოვანი ბლოკია. თითქმის იმიტომ, რომ თუ ერთ-ერთ echo ბრძანებაში წააწყდებით დახურვის ფრჩხილს, მაშინ თქვენ უნდა გაექცეთ მას ^ სიმბოლოთი, წინააღმდეგ შემთხვევაში პარსერი დაიბნევა...

მაგრამ ნებისმიერ შემთხვევაში, ეს ბევრად უკეთესია, ვიდრე ტეგების და გადასვლების გიჟური რაოდენობა.

ფუნქციები

შესაძლებელია თუ არა bat ფაილში ფუნქციის შექმნა? Დიახ, შეგიძლია. უფრო მეტიც, ზოგჯერ ეს აუცილებელია. მართალია, მათ შეიძლება ეწოდოს ფუნქციები პირობითად.

ზარის ბრძანებისთვის არის სპეციალური სინტაქსი, რომელიც საშუალებას გაძლევთ გადახვიდეთ ნიშანზე იმავე bat ფაილში, დაიმახსოვროთ ადგილი, საიდანაც ეს ზარი განხორციელდა:

call:label არგუმენტები

ფუნქცია ბრუნდება ბრძანებით:

გასვლა /b [სურვილისამებრ დაბრუნების კოდი]

/b ღილაკი აქ ძალიან მნიშვნელოვანია: მის გარეშე თქვენ გამოხვალთ არა ფუნქციიდან, არამედ ზოგადად სკრიპტიდან.

დეტალებისთვის, ჩაწერეთ ბრძანების სტრიქონში:

დარეკვა/?

გასვლა/?

საინტერესოა, რომ ზარის ბრძანება ამ სინტაქსით მხარს უჭერს რეკურსიულ ზარებს ცვლადი არგუმენტებისთვის %0-%9 ახალი ჩარჩოს ავტომატური შექმნით. ზოგჯერ ეს შეიძლება სასარგებლო იყოს. აქ არის რეკურსიული ფაქტორული გაანგარიშების კლასიკური მაგალითი ბრძანების ენაზე:

@echo გამორთულია

ზარი:ფაქტორული %1

ექო %RESULT%

გასასვლელი

rem ფუნქცია ფაქტორული მნიშვნელობის გამოსათვლელად

rem შესვლა:

rem %1 რიცხვი, რომლისთვისაც გსურთ გამოთვალოთ ფაქტორიალი

rem გამომავალი:

rem %RESULT% ფაქტორული მნიშვნელობა

:ფაქტორული

თუ %1 == 0 (

დააყენეთ RESULT=1

გასვლა /ბ

თუ %1 == 1 (

დააყენეთ RESULT=1

გასვლა /ბ

კომპლექტი /a PARAM=%1 - 1

ზარი:ფაქტორული %PARAM%

კომპლექტი /a RESULT=%1 * %RESULT%

გასვლა /ბ

სამუშაოს მაგალითი:

> factorial.bat 10

3628800

დაბრუნების ღირებულებების გამოყენება
(პროგრამის გასასვლელი კოდის დამუშავება)

როდესაც რომელიმე პროგრამა ასრულებს თავის მუშაობას, ის ოპერაციულ სისტემას უბრუნებს შეწყვეტის კოდს. ჩვეულებრივია ნულის დაბრუნება წარმატებით დასრულების შემდეგ, წინააღმდეგ შემთხვევაში შეცდომის კოდი. ზოგჯერ, უფრო სწორად, ხშირად, პროგრამა „განზრახ“ აბრუნებს არა-ნულოვან მნიშვნელობას, რათა მისი მოქმედების ზოგიერთი დეტალი „შეისწავლოს“ ჯგუფურ ფაილში. მაგალითად, პროგრამა აბრუნებს დაჭერილი კლავიშის კოდს და .bat ფაილი მასზე დაყრდნობით ასრულებს სხვადასხვა მოქმედებებს.

როგორ შეიძლება სერიულმა ფაილმა გაარკვიოს შესრულებული პროგრამის გასასვლელი კოდი? ERRORLEVEL გასაღები ცვლადი მოწოდებულია ამ მიზნით.

სერიული ფაილის მაგალითი შეცდომის დონეებით:

@ECHO OFF

REM გაუშვით პროგრამა prg1.exe

PRG1.EXE

REM დასრულების კოდის ანალიზი

IF ERORLEVEL 2 GOTO FILENOTFOUND

IF ERORLEVEL 1 GOTO WRITEERROR

IF ERORLEVEL 0 GOTO EXITOK

GOTO ONEXIT

:ᲤᲐᲘᲚᲘ ᲐᲠ ᲛᲝᲘᲫᲔᲑᲜᲐ

ECHO შეცდომა! Ფაილი არ მოიძებნა!

GOTO ONEXIT

:მწერალი

ECHO ჩაწერის შეცდომა!

GOTO ONEXIT

:EXITOK

ECHO პროგრამა წარმატებით დასრულდა.

GOTO ONEXIT

:ONEXIT

გთხოვთ გაითვალისწინოთ, რომ გასასვლელი კოდის ანალიზი არ იწყება ნულიდან, არამედ მაქსიმალური შესაძლო მნიშვნელობიდან. ფაქტია, რომ ასეთი შემოწმება ნიშნავს: "თუ შეცდომის დონე მეტია ან ტოლია მნიშვნელობაზე, მაშინ...". ანუ ნულიდან რომ შევამოწმოთ, პირველ სტრიქონზე ნებისმიერი მნიშვნელობა იქნება true, რაც არასწორია.

ეს არის ყველაზე გავრცელებული შეცდომა ამ ტიპის პროგრამებში.

Batch ფაილების შიგნით შეგიძლიათ იმუშაოთ ეგრეთ წოდებულ გარემოს ცვლადებთან (ან გარემოს ცვლადებთან), რომელთაგან თითოეული ინახება RAM-ში, აქვს თავისი უნიკალური სახელი და მისი მნიშვნელობა არის სტრიქონი. სტანდარტული გარემოს ცვლადები ავტომატურად ინიციალიზდება ოპერაციული სისტემის ჩატვირთვისას. ასეთი ცვლადებია, მაგალითად, WINDIR, რომელიც განსაზღვრავს Windows დირექტორიას მდებარეობას, TEMP, რომელიც განსაზღვრავს გზას Windows-ის დროებითი ფაილების შესანახად, ან PATH, რომელიც ინახავს სისტემის გზას (ძებნის გზას), ანუ დირექტორიების სია, რომლებშიც სისტემამ უნდა მოიძიოს შესრულებადი ფაილები ან გაზიარებული ფაილები (მაგალითად, დინამიური ბიბლიოთეკები). თქვენ ასევე შეგიძლიათ გამოაცხადოთ საკუთარი გარემოს ცვლადები სურათების ფაილებში SET ბრძანების გამოყენებით.

ცვლადის მნიშვნელობის მიღება

კონკრეტული გარემოს ცვლადის მნიშვნელობის მისაღებად, თქვენ უნდა დაურთოთ ამ ცვლადის სახელი % სიმბოლოებით. Მაგალითად:

@ECHO OFF CLS REM ცვლადის შექმნა MyVar SET MyVar=გამარჯობა REM ცვლადის შეცვლა SET MyVar=%MyVar%! ECHO MyVar ცვლადის მნიშვნელობა: %MyVar% REM MyVar ცვლადის წაშლა SET MyVar= ECHO WinDir ცვლადის მნიშვნელობა: %WinDir%

როდესაც თქვენ გაუშვით ასეთი სურათების ფაილი, ხაზი გამოჩნდება ეკრანზე

MyVar ცვლადის მნიშვნელობა: გამარჯობა! WinDir ცვლადის მნიშვნელობა: C:\WINDOWS

ცვლადების სტრიქონებად გადაქცევა

თქვენ შეგიძლიათ მანიპულირება გარემოს ცვლადები სურათების ფაილი გარკვეული გზები. პირველ რიგში, მათზე შეიძლება შესრულდეს შეერთების (წებოვნების) ოპერაცია. ამისათვის თქვენ უბრალოდ უნდა ჩაწეროთ დაკავშირებული ცვლადების მნიშვნელობები ერთმანეთის გვერდით SET ბრძანებაში. Მაგალითად,

SET A=ერთი ნაკრები B=ორი ნაკრები C=%A%%B%

ფაილში ამ ბრძანებების შესრულების შემდეგ, C ცვლადის მნიშვნელობა იქნება სტრიქონი "Double". თქვენ არ უნდა გამოიყენოთ + ნიშანი შეერთებისთვის, რადგან ის უბრალოდ განიმარტება როგორც სიმბოლო. მაგალითად, ფაილის გაშვების შემდეგ შემდეგი შინაარსით

SET A=ერთი კომპლექტი B=ორი კომპლექტი C=A+B ECHO ცვლადი C=%C% SET D=%A%+%B% ECHO ცვლადი D=%D%

ეკრანზე გამოჩნდება ორი ხაზი:

ცვლადი C=A+B ცვლადი D=ერთი+ორი

მეორეც, თქვენ შეგიძლიათ ამოიღოთ ქვესტრიქონები გარემოს ცვლადიდან კონსტრუქციის გამოყენებით %variable_name:~n1,n2%, სადაც რიცხვი n1 განსაზღვრავს შესაბამისი გარემოს ცვლადის ოფსეტს (გამოტოვებული სიმბოლოების რაოდენობას) თავიდან (თუ n1 დადებითია) ან ბოლოდან (თუ n1 უარყოფითია) შესაბამისი გარემოს ცვლადი, ხოლო რიცხვი n2 არის სიმბოლოების რაოდენობა. გამოყოფილი (თუ n2 დადებითია) ან ცვლადის ბოლო სიმბოლოების რაოდენობა, რომელიც არ იქნება შერჩეულ ქვესტრინგში (თუ n2 უარყოფითია). თუ მხოლოდ ერთი უარყოფითი -n ვარიანტია მითითებული, ბოლო n სიმბოლო იქნება ამოღებული. მაგალითად, თუ ცვლადი %DATE% ინახავს სტრიქონს „09/21/2007“ (მიმდინარე თარიღის სიმბოლური წარმოდგენა გარკვეულ რეგიონალურ პარამეტრებში), მაშინ შემდეგი ბრძანებების გაშვების შემდეგ

SET dd1=%DATE:~0.2% SET dd2=%DATE:~0.-8% SET mm=%DATE:~-7.2% SET yyyy=%DATE:~-4%

ახალ ცვლადებს ექნებათ შემდეგი მნიშვნელობები: %dd1%=21, %dd2%=21, %mm%=09, %yyyy%=2007.

მესამე, თქვენ შეგიძლიათ განახორციელოთ სტრიქონის ჩანაცვლების პროცედურა კონსტრუქციის გამოყენებით %variable_name:s1=s2%(ეს დააბრუნებს სტრიქონს s1 ქვესტრიქონის ყოველი შემთხვევის დროს შესაბამის გარემოს ცვლადში შეცვლილი s2-ით). მაგალითად, ბრძანებების შესრულების შემდეგ

SET a=123456 SET b=%a:23=99%

ცვლადი b შეინახავს სტრიქონს "199456". თუ s2 პარამეტრი არ არის მითითებული, მაშინ s1 ქვესტრიქონი წაიშლება გამომავალი სტრიქონიდან, ე.ი. ბრძანების შესრულების შემდეგ

SET a=123456 SET b=%a:23=%

ცვლადი b შეინახავს სტრიქონს "1456".

ოპერაციები ცვლადებთან, ისევე როგორც რიცხვებთან

როდესაც ჩართულია ბრძანებების გაძლიერებული დამუშავება (ნაგულისხმევი რეჟიმი Windows XP-ში), შესაძლებელია გარემოს ცვლადის მნიშვნელობები ციფრებად მივიჩნიოთ და მათზე არითმეტიკული გამოთვლების შესრულება. ამისათვის გამოიყენეთ SET ბრძანება /A გადამრთველით. აქ არის batch ფაილის მაგალითი add.bat, რომელიც ამატებს ორ რიცხვს, რომლებიც მოცემულია ბრძანების ხაზის პარამეტრებად და აჩვენებს მიღებულ თანხას ეკრანზე:

@ECHO OFF REM ცვლადი M შეინახავს ჯამს SET /A M=%1+%2 ECHO %1 და %2 ჯამი უდრის %M% REM ცვლადის წაშლა M SET M=

ლოკალური ცვლადი ცვლილებები

SET ბრძანების გამოყენებით ბრძანების ფაილში გარემოს ცვლადებში შეტანილი ნებისმიერი ცვლილება გრძელდება ფაილის გასვლის შემდეგ, მაგრამ ეფექტურია მხოლოდ მიმდინარე ბრძანების ფანჯარაში. ასევე შესაძლებელია გარემოს ცვლადებში ცვლილებების ლოკალიზაცია პარტიული ფაილის შიგნით, ანუ ავტომატურად აღადგინოთ ყველა ცვლადის მნიშვნელობები, როგორც ეს იყო ფაილის გაშვებამდე. ამისათვის გამოიყენება ორი ბრძანება: SETLOCAL და ENDLOCAL. SETLOCAL ბრძანება განსაზღვრავს ადგილობრივი გარემოს ცვლადის დაყენების არეალის დასაწყისს. სხვა სიტყვებით რომ ვთქვათ, SETLOCAL-ის გაშვების შემდეგ განხორციელებული გარემოს ცვლილებები ლოკალური იქნება მიმდინარე სერიული ფაილისთვის. თითოეულ SETLOCAL ბრძანებას უნდა ჰქონდეს შესაბამისი ENDLOCAL ბრძანება წინა გარემოს ცვლადის მნიშვნელობების აღსადგენად. ENDLOCAL ბრძანების შესრულების შემდეგ განხორციელებული გარემო ცვლილებები აღარ არის ლოკალური მიმდინარე სერიული ფაილისთვის; მათი წინა მნიშვნელობები არ აღდგება ამ ფაილის შესრულების დასრულების შემდეგ.

(ბრძანება) ფაილები, საშუალებას გაძლევთ გააკეთოთ დირექტორიების აბსოლუტური გზების მითითების გარეშე. მაგალითად, თუ წინასწარ არ ვიცით სისტემის დისკის ასო, ყოველთვის შეგვიძლია გამოვიყენოთ ცვლადი %systemdrive%, რომელიც აბრუნებს დისკის ასოს, რომელზეც დაინსტალირებულია OS. ასევე, ცვლადები გამოიყენება კოდის ოპტიმიზაციისთვის - განმეორებით გამეორებულ პარამეტრს (მაგალითად, რეესტრის გასაღები) შეიძლება მიენიჭოს მოკლე ცვლადი და გამოიყენოს. ეს სტატია დეტალურად განიხილავს ცვლადებთან მუშაობის სხვადასხვა ტექნიკას, ასევე ახალი ცვლადების შეცვლისა და შექმნის გზებს. ახლა მოდით ვისაუბროთ ყველაფერზე თანმიმდევრობით.

გარემოს ცვლადების კლასიფიკაცია
Windows Help განასხვავებს გარემოს ცვლადებს ორ ტიპს: სისტემასა და ლოკალურს. სისტემის ცვლადები უბრუნებენ ერთსა და იმავე მნიშვნელობებს ყველა მომხმარებლისთვის. Მაგალითად, %systemdrive%- სისტემის დისკის ასო და ის ყველა მომხმარებლისთვის ერთნაირია. მაგრამ ადგილობრივი ცვლადების მიერ დაბრუნებული მნიშვნელობები განსხვავდება შესული მომხმარებლის მიხედვით. Მაგალითად, %მომხმარებლის პროფილი%შეუძლია დააბრუნოს C:\Documents and Settings\CurrentUser, სადაც CurrentUser არის მომხმარებლის ანგარიშის სახელი.

ბრძანება დაგეხმარებათ გაარკვიოთ ოპერაციული სისტემის რომელი გარემო ცვლადებია თქვენთვის ხელმისაწვდომი და რა მნიშვნელობებია მათ ამჟამად მინიჭებული SET, გაშვებული ბრძანების ხაზიდან პარამეტრების გარეშე ( დაწყება – გაშვება – cmd – კომპლექტი). ამ სტატიაში ჩვენ გვაინტერესებს ცვლადები, რომლებიც მიუთითებენ გზას სხვადასხვა საქაღალდეების (დირექტორიების)კენ. ცოტა მეტი ზოგიერთი მათგანის შესახებ ქვემოთ:

ცვლადი|ტიპი|აღწერა
%SYSTEMDRIVE%|System|აბრუნებს დისკის სახელს, რომელიც შეიცავს Windows XP/2003 ოპერაციული სისტემის root დირექტორიას (ანუ სისტემის root დირექტორიას).
%SYSTEMROOT%, %WINDIR%|სისტემა|აბრუნებს Windows /2003 ოპერაციული სისტემის root დირექტორიას მდებარეობას
%PATH%|სისტემა|მიუთითებს შესრულებადი ფაილების ძიების გზას.
%PROGRAMFILES%|სისტემა|მიუთითებს გზას პროგრამის ინსტალაციის დირექტორიაში (პროგრამის ფაილები)
%COMMONPROGRAMFILES%|სისტემა|მიუთითებს გზას პროგრამის საერთო დირექტორიაში (Program Files\Common Files).
%TEMP% და %TMP%|სისტემა და მომხმარებელი|აბრუნებს აპლიკაციების მიერ გამოყენებულ ნაგულისხმევ დროებით საქაღალდეებს, რომლებიც ხელმისაწვდომია შესული მომხმარებლებისთვის. ზოგიერთ აპლიკაციას სჭირდება TEMP ცვლადი, ზოგისთვის საჭიროა TMP ცვლადი.
%USERPROFILE%|ლოკალური|აბრუნებს პროფილის მდებარეობას მიმდინარე მომხმარებლისთვის.
%ALLUSERSPROFILE%|ლოკალური|აბრუნებს "ყველა მომხმარებლის" პროფილის მდებარეობას.
%CD%|ლოკალური|აბრუნებს გზას მიმდინარე საქაღალდეში.
%APPDATA%|ლოკალური|აბრუნებს აპლიკაციის მონაცემების ნაგულისხმევ მდებარეობას.

ცვლადების გამოყენება Batch ფაილებში
დავიწყოთ მარტივი მაგალითით:

CMD/BATCH:

DEL /F /Q "%AllUsersProfile%\Main Menu\Windows Activation.lnk" DEL /F /Q "%AllUsersProfile%\Main Menu\WindowsUpdate.lnk" DEL /F /Q "%systemroot%\system32\*.scr "

ამ მაგალითში, მე ამოვხსნი ზემოხსენებულ მალსახმობებს, რომლებიც გამოჩნდება Start მენიუში ცვლადის გამოყენებით %AllUsersProfile%, ისევე როგორც ყველა ფაილი SCR გაფართოებით Windows\system32 დირექტორიადან, ცვლადის გამოყენებით %SystemRoot%. DEL /F /Q-ის ნაცვლად, როგორც გესმით, შეიძლება იყოს ყველაფერი: ასლის ბრძანებიდან COPY ბრძანებამდე აპლიკაციის ინსტალაციის დასაწყებად, ჩვენ გვჭირდება ბრძანების ხაზის ყველა პარამეტრი, საჭიროების შემთხვევაში.

ყველა ბრძანებაში მე სპეციალურად გამოვიყენე "ციტატები" - ეს შემთხვევითი არ არის. მთელი ბილიკი, ცვლადების ჩათვლით, უნდა იყოს ჩასმული ბრჭყალებში, თუ იყენებთ ბილიკებს, რომლებიც შეიცავს სივრცეებს. მაშინაც კი, თუ თავად ცვლადი არ შეიცავს ბრჭყალებს, სისტემის მიერ მისი გაანალიზების შემდეგ, გზაზე შეიძლება გამოჩნდეს სივრცეები (მაგალითად, %Პროგრამის ფაილი% C:\Program Files-ში). ნებისმიერ შემთხვევაში, უმჯობესია გამოიყენოთ ციტატები - ეს კარგი პრაქტიკაა ბრძანების ფაილების შემუშავებისას.

როგორ დააყენოთ თქვენი ცვლადები

ზემოთ მოცემულ მაგალითში გამოყენებულია უკვე არსებული გარემოს ცვლადები. და თქვენ ალბათ შენიშნეთ პროცენტული სიმბოლოები ცვლადის სახელების გარშემო. ეს სიმბოლოები საჭიროა ცვლადის ჩანაცვლების დასაშვებად ბრძანების სტრიქონზე ან ჯგუფურ ფაილში. პროცენტული სიმბოლოები მიუთითებს იმაზე, რომ Cmd.exe უნდა ჰქონდეს წვდომა ცვლადების მნიშვნელობებზე, ვიდრე სიმბოლო-სიმბოლოების შედარება. ქვემოთ ნახავთ როგორ მუშაობს. თქვენ შეგიძლიათ დააყენოთ თქვენი ცვლადები სერიულ ფაილში SET ბრძანებით.

SET ბრძანება
თქვენ შეგიძლიათ დააყენოთ თქვენი ცვლადები სერიულ ფაილში იგივე SET ბრძანების გამოყენებით.

ცვლადის დასამატებლად შეიყვანეთ ბრძანების სტრიქონში:

კოდი:

დააყენეთ variable_name=მნიშვნელობა

ცვლადის საჩვენებლად, შეიყვანეთ ბრძანების სტრიქონში:

კოდი:

ცვლადის_სახელის დაყენება

ცვლადის წასაშლელად, შეიყვანეთ ბრძანების სტრიქონში:

კოდი:

ცვლადის_სახელის დაყენება=

Მაგალითად,

კოდი:

SET mydir=D:\Files\Work

ადგენს ცვლადს mydir, რომელიც დააბრუნებს გზას მითითებულ საქაღალდეში. თქვენ შეგიძლიათ წაიკითხოთ მეტი გუნდის შესახებ კომპლექტი /?.

Მნიშვნელოვანი ჩანაწერი: set ბრძანებით დაყენებული ცვლადები მოქმედებს მხოლოდ ბრძანების სესიის ხანგრძლივობისთვის (იხ. ქვემოთ), რომელშიც ისინი დაყენებულია.

ეს ცვლადები შეიძლება შეიქმნას, მაგალითად, ნებისმიერი ბილიკისთვის, თქვენ უბრალოდ უნდა დააყენოთ ან იპოვოთ ალგორითმი ცვლადის მინიჭებისთვის თითოეულ კონკრეტულ სიტუაციაში, მზა მაგალითების გამოყენებით ან მათზე დაყრდნობით შექმნათ. როგორც წესი, ასეთი ცვლადები იქმნება მიმდინარე სესიაზე სერიული ფაილებით ზოგიერთი განცხადების გამოყენებით.

ფაილში ცვლადების მინიჭების მაგალითი RunOnceEx.cmdპარამეტრების იმპორტი რეესტრში

CMD/BATCH:

@echo off SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx SET i=100 REG ADD %KEY% /V TITLE /D "აპლიკაციების ინსტალაცია" /f REG ADD %KEY%\%i% /VE /D "WinRar 3.51" /f REG ADD %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f REG ADD %KEY%\%i% /V 2 / D "REGEDIT /S %systemdrive%\install\Software\rar_set.reg /s" /f SET /A i+=1

ამ სკრიპტში SET ბრძანება ადგენს ორ ცვლადს - %მე%და %ᲒᲐᲡᲐᲦᲔᲑᲘ%. გთხოვთ გაითვალისწინოთ, რომ ისინი მითითებულია პროცენტული სიმბოლოების გარეშე, მაგრამ მათზე წვდომისთვის უკვე საჭიროა %%. ცვლადი %ᲒᲐᲡᲐᲦᲔᲑᲘ%ემსახურება კოდის გამარტივებას და ოპტიმიზაციას. ის უცვლელი რჩება მიმდინარე ბრძანების სესიის განმავლობაში, რაც გამორიცხავს კოდში რეესტრის გასაღების ყოველ ჯერზე შეტანის აუცილებლობას. ყოველ ჯერზე, როდესაც ის გამოჩნდება კოდში %ᲒᲐᲡᲐᲦᲔᲑᲘ%, მას ჩაანაცვლებს HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx. Და აქ %მე%ემსახურება რეესტრის განყოფილებების თანმიმდევრულ ნუმერაციას. საწყისი მნიშვნელობით 100, ცვლადი იზრდება ერთით SET /A i+=1 ბრძანების გამოყენებით ბრძანებების ყოველი ბლოკის შემდეგ, რის შედეგადაც მიიღება თანმიმდევრობა 100, 101, 102 და ა.შ. ასე რომ ხაზი

კოდი:

REG დაამატეთ %KEY%\%i% /V 1 /D "%systemdrive%\install\Software\WinRar.exe /s" /f

რეალურად ასე იმუშავებს

კოდი:

REG დაამატეთ HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx\100 /V 1 /D "C:\install\Software\WinRar.exe /s" /f

გაითვალისწინეთ, რომ ფაილის ფრაგმენტი ასევე იყენებს სისტემის ცვლადს %systemdrive%, რომელიც შეესაბამება სისტემის დისკის ასოს.

ბრძანების ფაილში ცვლადების მინიჭების მაგალითი, რომელიც დააინსტალირებს აპლიკაციას CD-დან:

კოდი:

%%i-ისთვის (C D E F G H I J K L M N O P Q R S T U V W X Y Z), თუ არსებობს, გააკეთეთ %%i:\WIN51 დააყენეთ CDROM=%%i: დაწყება /მოითმინეთ „%CDROM%\INSTALL\DVDTools\NBRom\Nero.exe“

ამ მაგალითში, ყველა ჩამოთვლილი დისკი იძებნება კონკრეტული ფაილისთვის (WIN51). თუ ის აღმოჩენილია ერთ-ერთ დისკზე, ამ უკანასკნელს ენიჭება ცვლადი %CDROM%, და შემდეგ პროგრამული უზრუნველყოფის ინსტალაცია ხდება შექმნილი ცვლადის მიერ მითითებული ბილიკის გამოყენებით.

გარემოს ცვლადების შეცვლა და საკუთარი ცვლადების დამატება

როგორც ზემოთ აღინიშნა, set ბრძანებით დაყენებული ცვლადების ეფექტი შემოიფარგლება მიმდინარე ბრძანების სესიით. თუ გსურთ მიიღოთ სისტემის ან მომხმარებლის ცვლადი დროებითი ცვლადიდან, უნდა დაარეგისტრიროთ ის რეესტრში. ეს ასევე შეიძლება გაკეთდეს სხვადასხვა გზით.

setenv უტილიტა
პროგრამა მუშაობს ბრძანების ხაზიდან (ვებგვერდი, ჩამოტვირთვა). უტილიტა ძალიან მარტივი გამოსაყენებელია (setenv /?).


მომხმარებლის პარამეტრები|setenv -u ცვლადის_სახელის მნიშვნელობა
სისტემის პარამეტრები|setenv -m ცვლადი_სახელის მნიშვნელობა
პარამეტრები ნაგულისხმევი მომხმარებელი|setenv -d variable_name მნიშვნელობა
მომხმარებლის მიმდინარე სესიის პარამეტრები|setenv -v ცვლადის_სახელის მნიშვნელობა

ვთქვათ, თუ ინსტალაციის ეტაპზე გჭირდებათ %temp% ცვლადის მიღება, ამის გაკეთება შეგიძლიათ cmdlines.txt-დან, მაგალითად:

კოდი:

:: Temp საქაღალდის შექმნა და დაყენება... md %systemdrive%\Temp setenv -u Temp %systemdrive%\Temp setenv -u Tmp %systemdrive%\Temp

უტილიტა მოსახერხებელია, რადგან ცვლადის დაყენების შემდეგ, მისი გამოყენება შესაძლებელია დაუყოვნებლივ. კარგად, თითქმის მაშინვე - მომდევნო გუნდის სესიაზე. მიმდინარე სესიაზე გამოსაყენებლად, შეგიძლიათ გამოიყენოთ ძველი ნაცნობი ნაკრები ბრძანება:

კოდი:

:: #EgOrus# var ნაკრების შექმნა EgOrus=D:\EgOrus setenv -u EgOrus %EgOrus%

პარამეტრების იმპორტი რეესტრში
თუ თქვენ გადახვალთ რეესტრში ცვლილებების შეტანით პირველი შესვლის შემდეგ, მაშინ ცვლადები დაიწყებენ „მუშაობას“ მხოლოდ მომხმარებლის სესიის გადატვირთვის ან დასრულების შემდეგ. რა თქმა უნდა, ავტომატური ინსტალაციის პროცესში შეგიძლიათ სასურველი პარამეტრების იმპორტი T-12-ში (იხ. Registry Tweaks სტატია) და ამ პრობლემის გვერდის ავლით. თუ არ აპირებთ მინიჭებული ცვლადის გამოყენებას მომხმარებლის მიმდინარე სესიაში, მაშინ რეესტრში იმპორტი შეიძლება ასევე მოგეწონოთ. მე არ აღვწერ REG ფაილების იმპორტის პროცესს, მაგრამ განვიხილავ REG ADD ბრძანებას კონკრეტული მაგალითის გამოყენებით.

ვთქვათ, თქვენ დაინტერესებული ხართ სისტემაში ცვლადის არსებობით %CDROM%მუდმივად და დააინსტალირეთ CD-დან აპლიკაციების ინსტალაციის დროს. ზემოთ მოყვანილი კოდის შემდეგ, ცვლადის განსაზღვრის შემდეგ, თქვენ უნდა მიაკუთვნოთ ის სისტემურს.

CMD/BATCH:

%i-ისთვის (C D E F G H I J K L M N O P Q R S T U V W X Y Z), თუ არსებობს, გააკეთეთ %%i:\WIN51 დააყენეთ CDROM=%%i: REG დაამატე "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\cDROdromment/cDROdrom" ვ

WIN51 ფაილის პოვნის შემდეგ, დისკს, რომელზედაც ის იქნა ნაპოვნი, ენიჭება ლოკალური ცვლადი %CDROM%, რომელიც დაუყოვნებლივ მინიჭებულია როგორც სისტემის მუდმივი ცვლადი რეესტრში იმპორტის გზით. ეს მეთოდი შემოგვთავაზეს Oszone Sanja Alone კონფერენციაზე ერთ-ერთ თემაში. ამავე დროს თქვენ გაიგეთ. სადაც სისტემის ცვლადის პარამეტრები ინახება რეესტრში. მომხმარებლის ცვლადის პარამეტრები ინახება HKCU\Environment-ში. %PROGRAMFILES% და %COMMONPROGRAMFILES% ცვლადების მიერ დაბრუნებული ბილიკები შეიძლება ნახოთ ProgramFilesDir და CommonFilesDir პარამეტრებში HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion, მაგრამ არ უნდა შეიცვალოს იქ. პროგრამის ინსტალაციის დირექტორიები (გარდა %SystemDrive%\Program Files) უნდა იყოს კონფიგურირებული პასუხების ფაილის მეშვეობით.

Შემაჯამებელი
Windows ბრძანების გარსი (cmd.exe) არის ძალიან ძლიერი ინსტრუმენტი სისტემასთან მუშაობისთვის. Batch ფაილებს შეუძლიათ საკმაოდ დიდი რაოდენობის ამოცანების ავტომატიზაცია, რის გამოც ისინი ხშირად გამოიყენება Windows-ის ავტომატური ინსტალაციისთვის. ცვლადების ოსტატურად გამოყენება პარტიულ ფაილებში საშუალებას გაძლევთ გადაჭრათ პრობლემების ფართო სპექტრი. ბრძანების გარსთან მუშაობა უფრო ეფექტური ხდება და ამავდროულად გამარტივებულია სურათების ფაილების კოდი. თქვენ შეგიძლიათ იპოვოთ ცვლადების გამოყენების სხვა მაგალითები ვებსაიტის ან ფორუმის გვერდებზე. ამ სტატიაში გამოყენებული ყველა მაგალითი აღებულია OsZone.ru ფორუმის მონაწილეთა სკრიპტებიდან, რისთვისაც დიდი მადლობა მათ.

ტერმინოლოგია
ბრძანების ჭურვი
არის ცალკე პროგრამული პროდუქტი, რომელიც უზრუნველყოფს უშუალო კომუნიკაციას მომხმარებელსა და ოპერაციულ სისტემას შორის. ბრძანების ხაზის ტექსტის მომხმარებლის ინტერფეისი უზრუნველყოფს გარემოს, რომელშიც გაშვებულია ტექსტზე დაფუძნებული აპლიკაციები და უტილიტები.

cmd.exe- ბრძანების თარჯიმანი, რომელსაც Windows OS ბრძანების გარსი იყენებს შეყვანილი ბრძანების სისტემისთვის გასაგებ ფორმატში გადასათარგმნად.

გუნდის სესიაშეიძლება დაიწყოს ან გაშვებით cmd.exeდა სერიული ფაილის გაშვებით. სხვა სიტყვებით რომ ვთქვათ, იქმნება მიმდინარე ბრძანების გარსი. შესაბამისად, ამ ჭურვიდან გასვლა (მაგალითად, სერიული ფაილის დასრულება) მთავრდება ბრძანების სესიაზე.

მომხმარებლის სესია(მომხმარებლის სესია) იწყება მომხმარებლის შესვლისას (შესვლა) და მთავრდება, როდესაც მომხმარებელი გამოდის (გამორთვა).



გაქვთ შეკითხვები?

შეატყობინეთ შეცდომას

ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: