批处理脚本:显示变量"不被识别为内部或外部命令"

时间:2017-01-20 21:26:19

标签: windows batch-file cmd command

晚上好,

请原谅基本问题 - 我试图创建一个脚本,以便在我的工作场所做一些工作更有效率。

该脚本旨在打开网络共享并在其中创建文件夹,请求用户输入(这将是本地配置文件名称),如果存在,则将内容复制到我们在网络上创建的文件夹分享。然后该脚本将删除网络共享。

脚本如下(原谅不整洁)

    @echo off

net use X: \\40aGlenwood-NAS\ROOM16-Backup

:UserInput
set /p "UserName=Enter the user's name: " 

IF NOT EXIST %UserName% GOTO UserInput
IF EXIST %UserName% GOTO Proceed

:Proceed
xcopy "C:\Users\%UserName%\Desktop" "X:\Backup" /f /r /i

net use X: /D /YES

timeout /t 10

此脚本在理论上运行良好,但一旦运行,命令框将显示以下内容:

"Douglas" is not recognized as an internal or external command

请参阅道格拉斯'是我们声明的变量的一部分。它不应该是一个命令。

这里有什么帮助吗?我知道它不会影响脚本,但我不希望它显示该消息。另外,请记住,我以前没有编写或创建批处理脚本的经验。

1 个答案:

答案 0 :(得分:1)

给它一个旋转:

@echo off
setlocal    
%SystemRoot%\System32\net.exe use X: \\40aGlenwood-NAS\ROOM16-Backup
if %ERRORLEVEL% NEQ 0 (
    echo Failed to map drive.
    goto END
    )

:UserInput
set /p USER="Enter the user's name: " 
IF NOT EXIST "c:\users\%USER%\." GOTO UserInput

%SystemRoot%\System32\xcopy.exe "C:\Users\%USER%\Desktop" "X:\Backup" /f /r /i
%SystemRoot%\System32\net.exe use X: /D /YES
%SystemRoot%\System32\timeout.exe /t 10

endlocal    
:END

顺便说一句,显式路径引用是为了安全,即:防止其他人的NET.EXE等的代码执行。