我制作了一个小型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
我知道这可能是一个简单的解决方法,但我对代码知之甚少。
由于
答案 0 :(得分:1)
Stephan和aschipfl强烈推荐的建议适用于您的代码:
@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