如何在用户输入的bat脚本变量中有空格

时间:2015-12-15 06:47:11

标签: batch-file cmd xcopy robocopy

我制作了一个小型bat文件,用于创建带有用户输入名称的预建文件夹。它工作正常,直到用户输入带空格的变量。例如 - 用户输入" John"将创建一个文件夹,其中包含名为John的子文件夹(正是我们想要的),但是如果用户要输入Smith,John,则创建的文件夹将被称为Smith。如何允许脚本注册用户输入的空间?

我的代码 -

@echo off

set /P dest=Enter Name: 
set findest="Z:\ProjectIT\copy\%dest%"

robocopy Z:\ProjectIT\copy\xcopy "%findest

我知道这可能是一个简单的解决方法,但我对代码知之甚少。

由于

1 个答案:

答案 0 :(得分:1)

Stephanaschipfl强烈推荐的建议适用于您的代码:

@echo off

set /P "dest=Enter name: "
set "findest=Z:\ProjectIT\copy\%dest%"

%SystemRoot%\System32\robocopy.exe Z:\ProjectIT\copy\xcopy "%findest%"

请参阅Why is no string output with 'echo %var%' after using 'set var = text' on command line?上的答案,了解解释为什么set "VAR=Value"在分配上以及"%VAR%"对扩展/引用的强烈推荐,即使分配给变量的字符串包含1个以上的引号

这里还有一个改进版本,它允许使用双引号输入字符串,并将每个/(Linux / Mac目录分隔符)替换为\(Windows目录分隔符),并删除最后一个由于 ROBOCOPY 将目标路径的反斜杠解释为目录路径末尾的单个反斜杠,作为双引号的转义字符:

@echo off
setlocal EnableExtensions DisableDelayedExpansion

:EnterName
set "dest=""
set /P "dest=Enter name: "
set "dest=%dest:"=%"
if not defined dest cls & goto EnterName
set "dest=%dest:/=\%"
if "%dest:~-1%" == "\" set "dest=%dest:~0,-1%"
if not defined dest cls & goto EnterName

set "findest=Z:\ProjectIT\copy\%dest%"

%SystemRoot%\System32\robocopy.exe Z:\ProjectIT\copy\xcopy "%findest%"
endlocal