【问题标题】:How can I have a space in user inputted variable for bat script如何在用户输入的变量中为 bat 脚本留一个空格
【发布时间】:2016-03-20 20:34:51
【问题描述】:

我制作了一个小 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

我知道这可能很容易解决,但我对代码的了解非常有限。

谢谢

【问题讨论】:

  • 将变量与%findest% 一起使用 - 并删除之前的引用,您的变量已经包含它需要的所有引用。
  • 让我推荐使用语法set "VAR=Value"all 你的set 命令;这避免了特殊字符的麻烦,但 notValue 中包含引号;所以总有一个的地方来处理周围的引号——"%VAR%"扩展...

标签: batch-file cmd xcopy robocopy


【解决方案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? 上的示例答案,了解为什么即使分配给变量的字符串包含多 1 个引号,也强烈建议在分配时使用 set "VAR=Value" 并在扩展/引用时使用 "%VAR%"

这也是一个改进的版本,它允许使用双引号输入字符串,并将每个 /(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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2015-07-04
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多