我正在尝试创建一个批处理文件,该文件将在用户输入的桌面上创建一个文件夹。这是我的代码:
echo What do you want the folder to be called?
SET /p folderName=
md C:\Users\%username%\desktop\%folderName%
然而,每当我尝试这个时,它都会给我一个错误说:
A subdirectory or file C:\Users\Razi\desktop\ already exists.
最后似乎没有注意到%folderName%
。
有人可以告诉我我的代码有什么问题并提供替代方案吗?谢谢!
答案 0 :(得分:0)
显然,%folderName%
似乎是空的,正如您在错误消息中看到的那样,其中包含md
命令接收的路径参数。因此md
会尝试创建已存在的目录Desktop
。
如果输入有效的目录名称时出现错误,我很确定代码片段是括号中的块的一部分,在这种情况下,您需要启用并应用delayed expansion。否则,您将在执行整个块之前读取存在的folderName
值。
例如,命令解释器将以下块视为单个命令行;只要整个行/块被解析,%folderName%
就会被扩展(替换为它的值):
(
echo What do you want the folder to be called?
set /P folderName=
md "%USERPROFILE%\desktop\%folderName%"
)
在下文中,启用延迟扩展(setlocal
);要实际使用它,%
扩展已更改为!
;所以!folderName!
会在执行后立即展开(读取):
setlocal EnableDelayedExpansion
rem ...
(
echo What do you want the folder to be called?
set /P folderName=
md "%USERPROFILE%\desktop\!folderName!"
)
rem ...
endlocal
请注意,folderName
的更改值在endlocal
执行后不再可用,或者批处理文件终止(隐式endlocal
发生的地方)。
除了上述内容之外,我在md
命令的路径周围加上引号,以避免出现空格或特殊字符问题,并将C:\Users\%USERNAME%
更改为%USERPROFILE%
为建议在Stephan's comment。