Kommandot: "SHIFT" är på Windows 12, 11, 10, .. , MS Server 2025, 2022, 2019, .. tillgänglig
Exemplen för kommandot "SHIFT"
De
`SHIFT`kommando i Windows Kommandotolk används för att flytta positionen för parametrar i en batchfil. Här är några exempel på hur du använder
`SHIFT`-Kommando:
Exempel 1: Iterera genom parametrar i en batchfil:
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END
Beskrivning: Det här exemplet använder en loop för att iterera genom alla parametrar i en batchfil och visa dem en efter en. Kommandot
`SHIFT`används för att flytta parametrarnas position.
Exempel 2: Summa parametrar 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%
Beskrivning: I detta exempel summeras parametrarna i en slinga. Kommandot
`SHIFT`flyttar parameterpositionen och
`SET /A`används för att uppdatera summan.
Exempel 3: Arbeta med kapslade slingor och 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
Beskrivning: Detta exempel visar hur
`SHIFT`kan användas i kapslade slingor. Den yttre slingan bearbetar yttre parametrar medan den inre slingan bearbetar de inre parametrarna.
Exempel 4: Hoppa över parametrar med SHIFT:
@ECHO OFF
SHIFT
SHIFT
ECHO Tredje Parameter: %1
Beskrivning: Här används de två första parametrarna med två på varandra följande
`SHIFT`kommandon hoppas över och den tredje parametern visas.
Exempel 5: Kontrollera och hantera parametrar:
@ECHO OFF
:PARAM_LOOP
IF "%1"=="" GOTO END_PARAM
IF /I "%1"=="/DEBUG" (
ECHO Debug-Läge aktiverat.
SHIFT
GOTO PARAM_LOOP
)
ECHO Bearbeta Parameter: %1
SHIFT
GOTO PARAM_LOOP
:END_PARAM
Beskrivning: Detta exempel kontrollerar om den första parametern är
"/DEBUG". Om så är fallet skickas ett meddelande och parametern hoppas över.
De
`SHIFT`kommandot är särskilt användbart i batchskript där ett varierande antal parametrar måste bearbetas. Anteckna det
`SHIFT`flyttar innehållet i parameterlistan och omtilldelar parameterpositioner. Därför är det viktigt
`SHIFT`Använd klokt och enligt logiken i ditt batchskript.
"SHIFT" Utdrag från Microsoft Windows Hjälp
Microsoft Windows [Version 10.0.19045.3693]
(c) Copyright 1985-2023 Microsoft Corp.
C:\\Windows>
Ändrar position på utbytbara parametrar i en kommandofil.
SHIFT [/n]
Om kommandotilläggen är aktiverade stöder kommandot SHIFT
växeln /n som anger att kommandot ska börja skifta vid det
n:te argumentet. Värden mellan noll och åtta kan anges för n.
Till exempel:
SHIFT /2
skiftar %3 till %2, %4 till %3 etc. %0 och %1 påverkas inte.
Viktig information, tips för kommandot "SHIFT"
När du använder
`SHIFT`kommando i batchskript finns det några viktiga aspekter att ta hänsyn till:
1.
Parameterförlust: Om du
`SHIFT`detta flyttar positionen för parametrarna i parameterlistan till vänster. Detta betyder att värdet på den första parametern (
`%1`) av den andra parametern (
`%2`) ersätts, blir den andra parametern den tredje (
`%3`), och så vidare. Värdet för den sista parametern (
`%9`) går förlorad, och värdet av
`%0`(skriptnamnet) förblir oförändrat.
2.
Antal skift: Du kan
`SHIFT`bara nio gånger i ett batchskript eftersom det bara finns nio numeriska parametrar (
`%0`fram tills
`%9`) ger. Efter det nionde skiftet förblir värdet på den nionde parametern förlorat.
3.
SKIFT i slingor: Om du
`SHIFT`i en loop bör du se till att villkoren kontrolleras ordentligt för att undvika en oändlig loop om det inte finns några andra parametrar.
@ECHO OFF
:LOOP
IF "%1"=="" GOTO END_LOOP
ECHO Parameter: %1
SHIFT
GOTO LOOP
:END_LOOP
4.
SKIFT i kapslade slingor: Om du
`SHIFT`i kapslade loopar, observera att flytta parametrarna i en loop också påverkar parameterpositionerna i de kapslade looparna.
@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.
Försenad expansion och SHIFT: Om du
`SHIFT`i kombination med fördröjd expansion (
`ENABLEDELAYEDEXPANSION`), anteckna det
`!`används inte för fördröjd expansion
`%`.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET COUNT=0
:LOOP
IF "!1"=="" GOTO END_LOOP
SET /A COUNT+=1
SHIFT
GOTO LOOP
:END_LOOP
ECHO antal Parameter: %COUNT%
Det är viktigt att överväga ordningen och frekvensen av
`SHIFT`planera noga för att säkerställa att parametrarna flyttas som förväntat och att ingen information går förlorad. Kollar också efter tomma parametrar (
`IF "%1"==""`) är viktigt för att undvika oändliga loopar.