Komento: "SHIFT" on päällä Windows 12, 11, 10, .. , MS Server 2025, 2022, 2019, .. saatavilla
Esimerkit komennosta "SHIFT"
The
`SHIFT`Windowsin komentokehotteessa olevaa komentoa käytetään parametrien paikan siirtämiseen erätiedostossa. Tässä on joitain esimerkkejä käytöstä
`SHIFT`-Komento:
Esimerkki 1: iteroi erätiedoston parametrien kautta:
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END
Kuvaus: Tämä esimerkki käyttää silmukkaa erätiedoston kaikkien parametrien toistamiseen ja niiden näyttämiseen yksitellen. Käsky
`SHIFT`käytetään parametrien paikan siirtämiseen.
Esimerkki 2: Summaparametrit erätiedostossa:
@ECHO OFF
SET KAIKKI YHTEENSÄ=0
:ADD_LOOP
IF "%1"=="" GOTO END_ADD
SET /A KAIKKI YHTEENSÄ+= %1
SHIFT
GOTO ADD_LOOP
:END_ADD
ECHO kaikki yhteensä: %KAIKKI YHTEENSÄ%
Kuvaus: Tässä esimerkissä parametrit summataan silmukaksi. Käsky
`SHIFT`siirtää parametrin sijaintia ja
`SET /A`käytetään summan päivittämiseen.
Esimerkki 3: Sisäkkäisten silmukoiden ja SHIFT-näppäimen käyttäminen:
@ECHO OFF
:OUTER_LOOP
IF "%1"=="" GOTO END_OUTER
ECHO Outer Parameter: %1
SHIFT
:INNER_LOOP
IF "%1"=="" GOTO END_INNER
ECHO Inner Parameter: %1
SHIFT
GOTO INNER_LOOP
:END_INNER
GOTO OUTER_LOOP
:END_OUTER
Kuvaus: Tämä esimerkki näyttää kuinka
`SHIFT`voidaan käyttää sisäkkäisissä silmukoissa. Ulompi silmukka käsittelee ulkoisia parametreja, kun taas sisempi silmukka käsittelee sisäiset parametrit.
Esimerkki 4: Parametrien ohittaminen SHIFT-näppäimellä:
@ECHO OFF
SHIFT
SHIFT
ECHO Kolmanneksi Parameter: %1
Kuvaus: Tässä käytetään kahta ensimmäistä parametria kahdella peräkkäisellä parametrilla
`SHIFT`komennot ohitetaan ja kolmas parametri näytetään.
Esimerkki 5: Tarkista ja käsittele parametrit:
@ECHO OFF
:PARAM_LOOP
IF "%1"=="" GOTO END_PARAM
IF /I "%1"=="/DEBUG" (
ECHO Debug-Tila aktivoitu.
SHIFT
GOTO PARAM_LOOP
)
ECHO Käsitellä asiaa Parameter: %1
SHIFT
GOTO PARAM_LOOP
:END_PARAM
Kuvaus: Tämä esimerkki tarkistaa, onko ensimmäinen parametri
"/DEBUG". Jos näin on, lähetetään viesti ja parametri ohitetaan.
The
`SHIFT`-komento on erityisen hyödyllinen eräskripteissä, joissa on käsiteltävä vaihteleva määrä parametreja. Ota huomioon, että
`SHIFT`siirtää parametriluettelon sisältöä ja määrittää parametrien paikat uudelleen. Siksi se on tärkeää
`SHIFT`Käytä viisaasti ja eräskriptisi logiikan mukaisesti.
"SHIFT" Ote Microsoft Windowsin ohjeesta
Microsoft Windows [Version 10.0.19045.3693]
(c) Copyright 1985-2023 Microsoft Corp.
C:\\Windows>
Vaihtaa korvattavien parametrien paikkaa komentojonotiedostossa.
SHIFT [/n]
Jos komentolaajennukset ovat käytössä, SHIFT-komento tukee /n-
valitsinta,
jolloin argumenttien siirto alkaa n:nnestä argumentista.
Muuttujan n arvo
voi olla välillä 0 - 8. Esimerkiksi:
SHIFT /2
siirtää %3:n %2:en, %4:n %3:en jne. %0:n ja %1:n arvot jäävät
ennalleen.
Tärkeää tietoa, vinkkejä "SHIFT"-komennolle
Kun käytät
`SHIFT`komento eräskripteissä, on joitain tärkeitä näkökohtia huomioitava:
1.
Parametrien menetys: Jos et
`SHIFT`tämä siirtää parametrien sijaintia parametriluettelossa vasemmalle. Tämä tarkoittaa, että ensimmäisen parametrin arvo (
`%1`) toisen parametrin (
`%2`) korvataan, toisesta parametrista tulee kolmas (
`%3`), ja niin edelleen. Viimeisen parametrin arvo (
`%9`) menetetään, ja arvo
`%0`(skriptin nimi) pysyy ennallaan.
2.
Vuorojen lukumäärä: Voit
`SHIFT`vain yhdeksän kertaa eräkomentosarjassa, koska siinä on vain yhdeksän numeerista parametria (
`%0`siihen asti kun
`%9`) antaa. Yhdeksännen muuton jälkeen yhdeksännen parametrin arvo jää hukkaan.
3.
SHIFT silmukoissa: Jos et
`SHIFT`silmukassa, sinun tulee varmistaa, että ehdot tarkistetaan oikein, jotta vältetään loputon silmukka, jos muita parametreja ei ole.
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END_LOOP
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END_LOOP
4.
SHIFT sisäkkäisissä silmukoissa: Jos et
`SHIFT`sisäkkäisissä silmukoissa huomioi, että parametrien siirtäminen silmukassa vaikuttaa myös parametrien paikkoihin sisäkkäisissä silmukoissa.
@ECHO OFF
:OUTER_LOOP
IF "%1"=="" GOTO END_OUTER
ECHO Outer Parameter: %1
SHIFT
:INNER_LOOP
IF "%1"=="" GOTO END_INNER
ECHO Inner Parameter: %1
SHIFT
GOTO INNER_LOOP
:END_INNER
GOTO OUTER_LOOP
:END_OUTER
5.
Viiveellinen laajennus ja SHIFT: Jos et
`SHIFT`yhdessä viivästetyn laajenemisen kanssa (
`ENABLEDELAYEDEXPANSION`), ota huomioon, että
`!`ei käytetä viivästettyyn laajenemiseen
`%`.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET COUNT=0
:LOOP
IF "!1"=="" GOTO END_LOOP
SET /A COUNT+=1
SHIFT
GOTO LOOP
:END_LOOP
ECHO määrä Parameter: %COUNT%
On tärkeää ottaa huomioon järjestys ja tiheys
`SHIFT`Suunnittele huolellisesti varmistaaksesi, että parametrit siirretään odotetulla tavalla eikä tietoja menetetä. Tarkistaa myös tyhjiä parametreja (
`IF "%1"==""`) on tärkeää äärettömien silmukoiden välttämiseksi.