Kommandoen: "SHIFT" er tændt Windows 12, 11, 10, .. , MS Server 2025, 2022, 2019, .. tilgængelig
Eksempler på kommandoen "SHIFT"
Det
`SHIFT`kommando i Windows Kommandoprompt bruges til at flytte placeringen af parametre i en batchfil. Her er nogle eksempler på brug af
`SHIFT`-Kommando:
Eksempel 1: Gentag parametre i en batchfil:
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END
Beskrivelse: Dette eksempel bruger en loop til at gentage alle parametre i en batchfil og vise dem én efter én. Kommandoen
`SHIFT`bruges til at flytte parametrenes position.
Eksempel 2: Sumparametre i en batchfil:
@ECHO OFF
SET I ALT=0
:ADD_LOOP
IF "%1"=="" GOTO END_ADD
SET /A I ALT+= %1
SHIFT
GOTO ADD_LOOP
:END_ADD
ECHO Total: %I ALT%
Beskrivelse: I dette eksempel er parametrene summeret i en loop. Kommandoen
`SHIFT`flytter parameterpositionen, og
`SET /A`bruges til at opdatere totalen.
Eksempel 3: Arbejde med indlejrede 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 eksempel viser hvordan
`SHIFT`kan bruges i indlejrede løkker. Den ydre sløjfe behandler ydre parametre, mens den indre sløjfe behandler de indre parametre.
Eksempel 4: Spring parametre over med SHIFT:
@ECHO OFF
SHIFT
SHIFT
ECHO Tredje Parameter: %1
Beskrivelse: Her bruges de to første parametre med to på hinanden følgende
`SHIFT`kommandoer springes over, og den tredje parameter vises.
Eksempel 5: Kontroller og håndter parametre:
@ECHO OFF
:PARAM_LOOP
IF "%1"=="" GOTO END_PARAM
IF /I "%1"=="/DEBUG" (
ECHO Debug-Tilstand aktiveret.
SHIFT
GOTO PARAM_LOOP
)
ECHO Behandle Parameter: %1
SHIFT
GOTO PARAM_LOOP
:END_PARAM
Beskrivelse: Dette eksempel kontrollerer, om den første parameter er
"/DEBUG". Hvis dette er tilfældet, udsendes en meddelelse, og parameteren springes over.
Det
`SHIFT`kommandoen er især nyttig i batch-scripts, hvor et variabelt antal parametre skal behandles. Noter det
`SHIFT`flytter indholdet af parameterlisten og tildeler parameterpositioner igen. Derfor er det vigtigt
`SHIFT`Brug klogt og i overensstemmelse med logikken i dit batchscript.
"SHIFT" Uddrag fra Microsoft Windows Hjælp
Microsoft Windows [Version 10.0.19045.3693]
(c) Copyright 1985-2023 Microsoft Corp.
C:\\Windows>
Ændrer placeringen af parametre til en batchfil.
SHIFT
Hvis kommandoudvidelserne er aktiveret, understøtter kommandoen
SHIFT
parameteren /n, der fortæller kommandoen, at den skal starte
forskydningen
ved det n'te argument, hvor n kan være mellem nul og otte.
Eksempelvis vil:
SHIFT /2
forskyde %3 til %2, %4 til %3, osv. og lade %0 og %1 være
uændret.
Vigtig information, tip til kommandoen "SHIFT"
Ved brug af
`SHIFT`kommando i batch-scripts, er der nogle vigtige aspekter at overveje:
1.
Parametertab: Hvis du
`SHIFT`dette flytter parametrenes position i parameterlisten til venstre. Det betyder, at værdien af den første parameter (
`%1`) af den anden parameter (
`%2`) erstattes, bliver den anden parameter den tredje (
`%3`), og så videre. Værdien af den sidste parameter (
`%9`) er tabt, og værdien af
`%0`(scriptnavnet) forbliver uændret.
2.
Antal vagter: Du kan
`SHIFT`kun ni gange i et batchscript, fordi der kun er ni numeriske parametre (
`%0`indtil
`%9`) giver. Efter det niende skift forbliver værdien af den niende parameter tabt.
3.
SHIFT i sløjfer: Hvis du
`SHIFT`i en loop, bør du sikre dig, at betingelserne er kontrolleret korrekt for at undgå en uendelig loop, hvis der ikke er andre parametre.
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END_LOOP
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END_LOOP
4.
SKIFT i indlejrede løkker: Hvis du
`SHIFT`i indlejrede sløjfer, skal du bemærke, at flytning af parametrene i en sløjfe også påvirker parameterpositionerne i de indlejrede sløjfer.
@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 udvidelse og SHIFT: Hvis du
`SHIFT`i kombination med forsinket ekspansion (
`ENABLEDELAYEDEXPANSION`), Noter det
`!`bruges ikke til forsinket udvidelse
`%`.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET COUNT=0
:LOOP
IF "!1"=="" GOTO END_LOOP
SET /A COUNT+=1
SHIFT
GOTO LOOP
:END_LOOP
ECHO Antallet af Parameter: %COUNT%
Det er vigtigt at overveje rækkefølgen og hyppigheden af
`SHIFT`planlæg omhyggeligt for at sikre, at parametrene flyttes som forventet, og ingen information går tabt. Kontrollerer også for tomme parametre (
`IF "%1"==""`) er vigtigt for at undgå uendelige løkker.