【问题标题】:Windows Batch, passing arguments with spacesWindows Batch,用空格传递参数
【发布时间】:2017-03-28 02:24:09
【问题描述】:

我正忙于编写 Windows 批处理脚本,但我遇到了一些参数问题。

我的批处理脚本如下

@echo off

setlocal EnableDelayedExpansion

:: RETRIEVE ARGS WITH SPACES

set VAR01=%~1
set VAR02=%~2
set VAR03=%~3

:: CONFIRM IT WORKED

echo %VAR01%
echo %VAR02%
echo %VAR03%

endlocal

exit /b

我正在尝试传递包含空格的参数。

run_batch.bat "arg var 01" "arg var 02" "arg var 03"

但是当它运行时我得到了输出

arg var 01
ECHO is off
ECHO is off

为什么它只对第一个参数正常工作,如何解决?

注意

代码从来没有任何问题,似乎有一些不可见的特殊字符导致了问题。一定是文本编辑器或类似的东西。如何删除此问题?

【问题讨论】:

  • 因为你从不设置 VAR02 和 VAR03!
  • 抱歉打错了
  • 没有错字,它按预期工作
  • 我得到了那些空回声
  • 请将脚本复制到一个新文件中(从此页面)并重新检查。它应该工作

标签: windows batch-file arguments


【解决方案1】:

这应该可行:

@echo off

setlocal EnableDelayedExpansion

:: RETRIEVE ARGS WITH SPACES

set VAR01=%~1
set VAR02=%~2
set VAR03=%~3

:: CONFIRM IT WORKED

echo %VAR01%
echo %VAR02%
echo %VAR03%

endlocal

exit /b

错误的部分是:

set VAR01=%~1
set VAR01=%~2
set VAR01=%~3

但应该是:

set VAR01=%~1
set VAR02=%~2
set VAR03=%~3

【讨论】:

  • 我的版本中从来没有错字,只是我的问题中的错字
  • @Trent 请接受这个答案,因为它解决了你的问题
  • 问题似乎与从文本编辑器创建的不可见特殊字符有关
  • @ManuelTaber 我该如何结束这个问题?还是删除它?
【解决方案2】:

一个小示例脚本供您阅读。

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

REM EXIT IF NO ARGS RECEIVED
IF "%~1"=="" EXIT

REM SET MINIMUM NUMBER OF ARGS
SET "i=1"

REM RETRIEVE ALL ARGS
:ARGS
SET "VAR0%i%=%~1"
SHIFT
IF NOT "%~1"=="" (
    SET/A i+=1
    GOTO :ARGS
)

REM INFORM NUMBER OF ARGS
CLS
ECHO=THERE WERE %i% ARGS

REM CONFIRM IT WORKED
ECHO=
SET VAR0

REM ALTERNATIVE CONFIRMATION
ECHO=
FOR /L %%A IN (1,1,%i%) DO IF DEFINED VAR0%%A ECHO=!VAR0%%A!

TIMEOUT -1
ENDLOCAL
EXIT

【讨论】:

    【解决方案3】:

    我认为除了拼写错误之外没有任何问题。显示 args 并将它们放入我从 DosTips.org 学到的编号变量的一种非常棘手的方法(但找不到确切的链接)是:

    :: Expand-Args.cmd
    @Echo off
    Set Args=,1=%~1,2=%~2,3=%~3,4=%~4,5=%~5,6=%~6,7=%~7,8=%~8,9=%~9
    Set "Args=%*%Args:,="&Set "Arg%"
    Set Arg
    

    批处理将运行此输出: Expand-Args one "2 2" three 4 five 6 "7 7" 8 9

    Arg1=one
    Arg2=2 2
    Arg3=three
    Arg4=4
    Arg5=five
    Arg6=6
    Arg7=7 7
    Arg8=8
    Arg9=9
    Args=one "2 2" three 4 five 6 "7 7" 8 9
    

    编辑为了不干扰双引号中的内容,分隔符 comma 可能会替换为不常见的字符,例如 ALT+0127

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 2019-11-13
      • 2017-05-02
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      相关资源
      最近更新 更多