Het commando: "SHIFT" staat aan Windows 12, 11, 10, .. , MS Server 2025, 2022, 2019, .. beschikbaar
De voorbeelden voor het commando "SHIFT"
De
`SHIFT`opdracht in Windows Command Prompt wordt gebruikt om de positie van parameters in een batchbestand te verplaatsen. Hier zijn enkele voorbeelden van het gebruik van de
`SHIFT`-Commando:
Voorbeeld 1: Herhaal de parameters in een batchbestand:
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END
Beschrijving: Dit voorbeeld gebruikt een lus om alle parameters in een batchbestand te doorlopen en ze één voor één weer te geven. Het bevel
`SHIFT`wordt gebruikt om de positie van de parameters te verplaatsen.
Voorbeeld 2: Parameters optellen in een batchbestand:
@ECHO OFF
SET TOTAAL=0
:ADD_LOOP
IF "%1"=="" GOTO END_ADD
SET /A TOTAAL+= %1
SHIFT
GOTO ADD_LOOP
:END_ADD
ECHO totaal: %TOTAAL%
Beschrijving: In dit voorbeeld worden de parameters in een lus opgeteld. Het bevel
`SHIFT`verplaatst de parameterpositie, en
`SET /A`wordt gebruikt om het totaal bij te werken.
Voorbeeld 3: Werken met geneste lussen en 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
Beschrijving: Dit voorbeeld laat zien hoe
`SHIFT`kan worden gebruikt in geneste lussen. De buitenste lus verwerkt de buitenste parameters, terwijl de binnenste lus de binnenste parameters verwerkt.
Voorbeeld 4: Parameters overslaan met SHIFT:
@ECHO OFF
SHIFT
SHIFT
ECHO Derde Parameter: %1
Beschrijving: Hier worden de eerste twee parameters twee opeenvolgende gebruikt
`SHIFT`opdrachten worden overgeslagen en de derde parameter wordt weergegeven.
Voorbeeld 5: Parameters controleren en verwerken:
@ECHO OFF
:PARAM_LOOP
IF "%1"=="" GOTO END_PARAM
IF /I "%1"=="/DEBUG" (
ECHO Debug-Modus geactiveerd.
SHIFT
GOTO PARAM_LOOP
)
ECHO Proces Parameter: %1
SHIFT
GOTO PARAM_LOOP
:END_PARAM
Beschrijving: Dit voorbeeld controleert of de eerste parameter
"/DEBUG" is. Als dit het geval is, wordt er een melding gegeven en wordt de parameter overgeslagen.
De
`SHIFT`commando is vooral handig in batchscripts waarbij een variabel aantal parameters moet worden verwerkt. Let daar op
`SHIFT`verplaatst de inhoud van de parameterlijst en wijst parameterposities opnieuw toe. Daarom is het belangrijk
`SHIFT`Gebruik verstandig en volgens de logica van uw batchscript.
"SHIFT" Fragment uit Microsoft Windows Help
Microsoft Windows [Version 10.0.19045.3693]
(c) Copyright 1985-2023 Microsoft Corp.
C:\\Windows>
Wijzigt de positie van een vervangbare parameter in een
batchbestand.
SHIFT [/n]
Als opdrachtextensies worden ingeschakeld, ondersteunt de
opdracht
SHIFT de schakeloptie /n, waardoor de opdracht begint met het
verplaatsen vanaf het x-de argument, waarbij x een waarde van
0 t/m 8 is. Bijvoorbeeld:
SHIFT /2
verplaatst %3 naar %2, %4 naar %3 etc, waarbij %0 en %1 niet
worden beïnvloed.
Belangrijke informatie, tips voor het "SHIFT" commando
Bij gebruik van de
`SHIFT`commando in batchscripts, zijn er enkele belangrijke aspecten waarmee u rekening moet houden:
1.
Parameterverlies: Als u
`SHIFT`hierdoor wordt de positie van de parameters in de parameterlijst naar links verplaatst. Dit betekent dat de waarde van de eerste parameter (
`%1`) door die van de tweede parameter (
`%2`) wordt vervangen, de tweede parameter wordt de derde (
`%3`), enzovoorts. De waarde van de laatste parameter (
`%9`) gaat verloren, en de waarde van
`%0`(de scriptnaam) blijft ongewijzigd.
2.
Aantal diensten: Dat kan
`SHIFT`slechts negen keer in een batchscript omdat er slechts negen numerieke parameters zijn (
`%0`tot
`%9`) geeft. Na de negende verschuiving blijft de waarde van de negende parameter verloren.
3.
SHIFT in loops: Als je
`SHIFT`in een lus moet u ervoor zorgen dat de voorwaarden goed worden gecontroleerd om een oneindige lus te voorkomen als er geen andere parameters zijn.
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END_LOOP
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END_LOOP
4.
SHIFT in geneste lussen: Als je
`SHIFT`Houd er bij geneste lussen rekening mee dat het verplaatsen van de parameters in een lus ook de parameterposities in de geneste lussen beïnvloedt.
@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.
Vertraagde uitbreiding en SHIFT: Als je
`SHIFT`in combinatie met vertraagde expansie (
`ENABLEDELAYEDEXPANSION`), Let daar op
`!`wordt niet gebruikt voor vertraagde expansie
`%`.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET COUNT=0
:LOOP
IF "!1"=="" GOTO END_LOOP
SET /A COUNT+=1
SHIFT
GOTO LOOP
:END_LOOP
ECHO aantal Parameter: %COUNT%
Het is belangrijk om rekening te houden met de volgorde en frequentie van
`SHIFT`plan zorgvuldig om ervoor te zorgen dat de parameters worden verplaatst zoals verwacht en dat er geen informatie verloren gaat. Controleer ook op lege parameters (
`IF "%1"==""`) is belangrijk om oneindige lussen te voorkomen.