当用户在空格中键入时,Windows脚本不起作用

时间:2015-09-30 08:29:20

标签: batch-file windows-scripting spritebatch

我正在批量编写Windows脚本。我对变量中的空格有问题。当用户键入空格时,脚本会中断。

这是我脚本的一部分:

:package
SET /P packageName="Set package name:"
IF [%packageName%] EQU [] (
   ECHO Empty package name.
   goto package
) ELSE (
    set "packageName=%packageName: =%"
    echo %packageName%
    pause
)

3 个答案:

答案 0 :(得分:4)

这个工作:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:package
SET /P packageName="Set package name:"
IF "%packageName%"=="" (
   ECHO Empty package name.
   goto package
) ELSE (
    set packageName=%packageName: =%
    echo !packageName!
    pause
)

您的脚本有两处修改:

  • [%packageName%] EQU []已替换为"%packageName%"==""
  • 我添加了SETLOCAL ENABLEDELAYEDEXPANSION并将echo %packageName%更改为echo !packageName!

第二点是因为你正在改变IF结构中变量的值。由于解释器在“编译”时不知道新值是什么,因此必须在运行时评估变量。这就是您需要SETLOCAL ENABLEDELAYEDEXPANSION!...!而不是%...%的原因。这会在运行时强制扩展。

答案 1 :(得分:2)

我建议使用此代码:

@echo off
setlocal EnableDelayedExpansion
:package
rem Predefine variable packageName with a single double quote as value.
rem This value is kept if the user just hits RETURN or ENTER on prompt.
rem The single double quote is removed 2 command lines below if the user
rem does not enter anything or it is overwritten by user entered string.
set "packageName=""

set /P "packageName=Set package name: "

rem Remove double quotes from entered string. This is necessary to
rem avoid a syntax error on next command line with the IF condition.
set "packageName=!packageName:"=!"

if "!packageName!" == "" (
    echo Empty package name.
    goto package
) else (
    set "packageName=%packageName: =%"
    echo Package name with spaces:    %packageName%
    echo Package name without spaces: !packageName!
    pause
)
endlocal

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • if /?
  • set /?
  • setlocal /?

特别是执行if /?时输出的帮助页面应该仔细阅读,因为这有助于解释延迟扩展,因为必须在这里使用示例。

另请参阅上面代码中 ELSE 分支中2 echo 行的输出,以了解引用具有百分号的变量或带有感叹号的变量之间的区别使用( ... )定义的块。

答案 2 :(得分:0)

您的脚本几乎正确,但“变量搜索/替换”除外,其位置应在“IF”之前

@echo off
:package
set /p packagename="set package name:"
set packagename=%packagename: =%
if [%packagename%] equ [] (
echo empty package name &goto package
) else (echo %packagename%)