使用批处理文件中的用户输入在桌面上创建文件夹

时间:2016-03-14 19:13:50

标签: batch-file directory

我正在尝试创建一个批处理文件,该文件将在用户输入的桌面上创建一个文件夹。这是我的代码:

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%。 有人可以告诉我我的代码有什么问题并提供替代方案吗?谢谢!

1 个答案:

答案 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