The SHIFT command in Windows Command Prompt (CMD) is used to manipulate the position of replaceable parameters in batch files. This command shifts the values of command line arguments so that script can handle more arguments than the number specified in the original batch command. It is particularly useful in looping constructs and when dealing with a series of inputs where the number of inputs exceeds the number of parameters that can be directly accessed.


The syntax for SHIFT is straightforward as the command does not take any direct arguments:

SHIFT [/n]
  • /n: This optional parameter indicates that the command should begin shifting at the nth argument, where n is an integer specifying the position. It allows for ignoring certain command line arguments during the shift.


  • /n: When used, shifts the command line arguments starting at the position n. For example, SHIFT /2 would leave %0 and %1 unchanged and shift %2 to %1, %3 to %2, and so on. It is primarily useful when some arguments are meant to remain static throughout the execution of a batch file.


  1. Basic Usage:

    @echo off
    echo %1
    if not "%1"=="" goto start

    This script will display each argument passed to the batch file one by one until there are no more.

  2. Using /n Option:

    @echo off
    shift /2
    echo First argument after shift: %1

    Assuming the batch file is executed as script.bat arg1 arg2 arg3, the output will start with arg3 as the first argument due to shifting starting from %3.

Common Issues

  • Not Including Enough Shifts: Users often forget to include enough SHIFT commands in loops, which causes an infinite loop or incorrect processing after the first set of shifts.
  • Misunderstanding Initial Arguments: %0, which holds the command or script name, is not affected by SHIFT. Errors could occur if the user tries to access a shifted %0.


SHIFT can be combined with looping constructs such as FOR and other conditional statements to process a variable number of arguments effectively:

@echo off
setlocal enabledelayedexpansion
for %%x in (%*) do (
    echo Now processing: %%x
  • FOR: Used for looping through sets of data, often combined with SHIFT for processing command line arguments.
  • IF: Used for conditional logic in batch scripts.

For more information and advanced usage, refer to the Microsoft official documentation: Windows Command Line Documentation.