【问题标题】:Using Batch file SHIFT command [duplicate]使用批处理文件 SHIFT 命令 [重复]
【发布时间】:2013-03-30 21:40:32
【问题描述】:

我正在尝试在屏幕上显示多达 9 个参数, 然后在接下来的每一行中少显示一个,直到一个都没有。

我试过了:

@echo off
echo %*
shift
echo %*
shift
echo %*

实际结果:

   a b c d e f
   a b c d e f

预期结果:

A B C D E F
B C D E F
C D E F
D E F
E F
F

有什么帮助吗?

谢谢。

【问题讨论】:

  • @david 感谢您的指示,我现在明白了。非常感谢。 ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9 偏移 ECHO %1 %2 %3 %4 %5 %6 %7 %8 %9 偏移 ECHO %1 %2 %3 %4 % 5 %6 %7 %8 %9
  • 一个很好的“包罗万象”的例子:stackoverflow.com/questions/830565/…

标签: batch-file cmd


【解决方案1】:

如果要获取%1、%2等的值,SHIFT是值得的。它不影响%*。此脚本为您提供您期望的输出。

@echo off
setlocal enabledelayedexpansion

set args=0
for %%I in (%*) do set /a "args+=1"
for /l %%I in (1,1,%args%) do (
    set /a idx=0
    for %%a in (%*) do (
        set /a "idx+=1"
        if !idx! geq %%I set /p "=%%a "<NUL
    )
    echo;
)

输出:

C:\Users\me\Desktop>test a b c d e f
a b c d e f
b c d e f
c d e f
d e f
e f
f

【讨论】:

    【解决方案2】:

    Shift 不会改变实际顺序,只会改变参数的索引/指针。

    试试这个:

    @echo off
    echo %1
    shift 
    echo %1
    shift
    echo %1
    echo %*
    

    你会得到这个:

    a
    b
    c
    a b c d
    

    【讨论】:

      【解决方案3】:

      "Shift 对 %* 批处理参数没有影响"

      来源:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

      我建议把你的代码改成循环之类的

      【讨论】:

        【解决方案4】:

        %* 总是从命令行打印所有参数(%0 除外)。它不支持 SHIFT 命令。

        您需要按位置明确回显所有参数:%1 %2 %3...

        @echo off
        :loop
        if "%~1" neq "" (
          echo %1 %2 %3 %4 %5 %6 %7 %8 %9
          shift
          goto :loop
        )
        

        【讨论】:

          猜你喜欢
          • 2016-07-17
          • 2012-07-14
          • 1970-01-01
          • 1970-01-01
          • 2014-02-26
          • 2010-12-23
          • 1970-01-01
          • 1970-01-01
          • 2019-11-15
          相关资源
          最近更新 更多