Kommandoen: "SHIFT" er på Windows 12, 11, 10, .. , MS Server 2025, 2022, 2019, .. tilgjengelig
Eksemplene for kommandoen "SHIFT"
De
`SHIFT`kommando i Windows Ledetekst brukes til å flytte posisjonen til parametere i en batchfil. Her er noen eksempler på bruk av
`SHIFT`-Kommando:
Eksempel 1: Iterer gjennom parametere i en batchfil:
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END
Beskrivelse: Dette eksemplet bruker en loop for å iterere gjennom alle parametere i en batchfil og vise dem én etter én. Kommandoen
`SHIFT`brukes til å flytte posisjonen til parameterne.
Eksempel 2: Sum parametere i en batchfil:
@ECHO OFF
SET TOTAL=0
:ADD_LOOP
IF "%1"=="" GOTO END_ADD
SET /A TOTAL+= %1
SHIFT
GOTO ADD_LOOP
:END_ADD
ECHO Total: %TOTAL%
Beskrivelse: I dette eksemplet summeres parameterne i en sløyfe. Kommandoen
`SHIFT`flytter parameterposisjonen, og
`SET /A`brukes til å oppdatere totalen.
Eksempel 3: Arbeid med nestede løkker og SHIFT:
@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
Beskrivelse: Dette eksemplet viser hvordan
`SHIFT`kan brukes i nestede løkker. Den ytre sløyfen behandler ytre parametere mens den indre sløyfen behandler de indre parametrene.
Eksempel 4: Hopp over parametere med SHIFT:
@ECHO OFF
SHIFT
SHIFT
ECHO Tredje Parameter: %1
Beskrivelse: Her brukes de to første parameterne med to påfølgende
`SHIFT`kommandoer hoppes over og den tredje parameteren vises.
Eksempel 5: Sjekk og håndter parametere:
@ECHO OFF
:PARAM_LOOP
IF "%1"=="" GOTO END_PARAM
IF /I "%1"=="/DEBUG" (
ECHO Debug-Modus aktivert.
SHIFT
GOTO PARAM_LOOP
)
ECHO Prosess Parameter: %1
SHIFT
GOTO PARAM_LOOP
:END_PARAM
Beskrivelse: Dette eksemplet kontrollerer om den første parameteren er
"/DEBUG". Hvis dette er tilfelle, sendes en melding og parameteren hoppes over.
De
`SHIFT`kommandoen er spesielt nyttig i batch-skript der et variabelt antall parametere må behandles. Noter det
`SHIFT`flytter innholdet i parameterlisten og tildeler parameterposisjoner på nytt. Derfor er det viktig
`SHIFT`Bruk klokt og i henhold til logikken til batchskriptet ditt.
"SHIFT" Utdrag fra Microsoft Windows Hjelp
Microsoft Windows [Version 10.0.19045.3693]
(c) Copyright 1985-2023 Microsoft Corp.
C:\\Windows>
Endrer plasseringen av erstattelige parametere i en satsvis fil.
SHIFT [/n]
Hvis kommandoutvidelser er aktivert, støtter SHIFT-kommandoen
bryteren /n,
som lar kommandoen starte skiftingen ved det n-te argumentet,
hvor n kan være
mellom null og åtte. Eksempel:
SHIFT /2
Dette skifter %3 til %2, %4 til %3 osv., og gjør ingenting med %0
og %1.
Viktig informasjon, tips for "SHIFT"-kommandoen
Når du bruker
`SHIFT`kommando i batch-skript, er det noen viktige aspekter å vurdere:
1.
Parametertap: Hvis du
`SHIFT`dette flytter posisjonen til parameterne i parameterlisten til venstre. Dette betyr at verdien til den første parameteren (
`%1`) av den andre parameteren (
`%2`) erstattes, blir den andre parameteren den tredje (
`%3`), og så videre. Verdien av den siste parameteren (
`%9`) går tapt, og verdien av
`%0`(skriptnavnet) forblir uendret.
2.
Antall skift: Du kan
`SHIFT`bare ni ganger i et batchskript fordi det bare er ni numeriske parametere (
`%0`før
`%9`) gir. Etter det niende skiftet forblir verdien til den niende parameteren tapt.
3.
SKIFT i løkker: Hvis du
`SHIFT`i en sløyfe bør du sørge for at forholdene kontrolleres riktig for å unngå en uendelig sløyfe hvis det ikke er andre parametere.
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END_LOOP
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END_LOOP
4.
SKIFT i nestede løkker: Hvis du
`SHIFT`i nestede løkker, merk at flytting av parameterne i en løkke også påvirker parameterposisjonene i de nestede løkkene.
@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.
Forsinket utvidelse og SHIFT: Hvis du
`SHIFT`i kombinasjon med forsinket ekspansjon (
`ENABLEDELAYEDEXPANSION`), noter det
`!`brukes ikke til forsinket utvidelse
`%`.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET COUNT=0
:LOOP
IF "!1"=="" GOTO END_LOOP
SET /A COUNT+=1
SHIFT
GOTO LOOP
:END_LOOP
ECHO antall Parameter: %COUNT%
Det er viktig å vurdere rekkefølgen og hyppigheten av
`SHIFT`planlegge nøye for å sikre at parameterne flyttes som forventet og at ingen informasjon går tapt. Sjekker også for tomme parametere (
`IF "%1"==""`) er viktig for å unngå uendelige løkker.