【问题标题】:Read each character of argument in a batch file读取批处理文件中参数的每个字符
【发布时间】:2012-11-22 23:46:38
【问题描述】:

cmd 中的示例输入:

test.bat /p 1,3,4

预期结果:

1
3
4

到目前为止我的代码:

@echo off
set arg = %1
set var = %2
if (%1)==(/p) (
... need code that will read and print each character of var
)

【问题讨论】:

    标签: batch-file arguments parameter-passing command-line-arguments


    【解决方案1】:

    您的问题可能存在问题。如果 test.bat 是:

    @echo %1%
    

    然后

    test 1,2,3
    

    打印:

    1
    

    因为在这种情况下,逗号被视为参数分隔符。

    所以你要么需要用引号引起来:

    test "1,2,3"
    

    或者使用不同的内部分隔符:

    test 1:2:3    
    

    除非您希望将零件放置在 %2、%3 等中,在这种情况下,您的问题可以通过简单使用 SHIFT 来解决。

    对于我的解决方案,我选择在组参数“1,2,3”周围加上引号(尽管通过更改 delims=, 来指定要使用的字符,这很容易适应不同的分隔符)。

    @echo off
    setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
    
    set args=%~2
    
    if "%1"=="/p" (
    :NextToken
        for /F "usebackq tokens=1* delims=," %%f in ('!args!') do (
            echo %%f
            set args=%%g
        )
        if defined args goto NextToken
    )
    

    调用方式:

    readch.bat /p "1,2,3"
    

    %~2 用于删除引号。

    FOR 语句解析 args,将第一个标记放入 %f,将行的其余部分放入 %g

    `goto NextToken' 行循环直到没有更多的标记。

    【讨论】:

      【解决方案2】:
      @echo off
      if "%1"=="/p" (
      :LOOP
      echo %2
      shift
      set arg=%2
      if defined arg goto :LOOP else exit >nul
      )
      

      【讨论】:

        【解决方案3】:
        set params=%%~2
        if (%1)==(/p) (
            set params=%params:,= %
        )
        if "%params%" NEQ "" (
          call :printer %params%
        )
        goto :eof
        
        :printer
        :shifting
        if "%%1" NEQ "" (
          echo %%1
        ) else (
         goto :eof
        )
        shift
        goto :shifting
        goto :eof
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-04
          • 1970-01-01
          • 1970-01-01
          • 2014-10-15
          • 1970-01-01
          • 2012-07-30
          相关资源
          最近更新 更多