在文件夹名称中使用空格时遇到麻烦

时间:2019-06-06 17:55:32

标签: batch-file cmd

当用户在文件夹名称中输入空格时,我可以使用以下代码创建和删除文件夹,但是启动或打开文件夹的行将不起作用。

我尝试了几种不同的方法。如果我在起始行中使用“%input%”,则引号将用作文件夹名称的一部分,因此无法识别。如果我取消了“”,则只能识别名称中的第一个单词,因此找不到该文件夹​​。 Md和Rd线与引号完美配合。

@echo off
echo Type in the name of your folder and hit enter.
set /P x=Please type the folder name here:
md %userprofile%\desktop\"%x%"
start %userprofile%\desktop\"%x%"
pause
rd %userprofile%\desktop\"%x%"

我希望该文件夹在桌面上打开,但会出现一个错误,提示您无法识别该名称。

1 个答案:

答案 0 :(得分:0)

请阅读以下How to stop Windows command interpreter from quitting batch file execution on an incorrect user input?上的答案以及下面的批处理代码中的推荐内容,以了解为什么此代码对您的任务更好。

通常有必要将整个参数字符串用双引号引起来,而不仅仅是部分,如下面所示。

@echo off
setlocal EnableExtensions DisableDelayedExpansion
echo Type in the name of your folder and hit ENTER.
:UserPrompt
set "Folder="
set /P "Folder=Please type the folder name here: "
rem Has the user entered a string at all?
if not defined Folder goto UserPrompt
rem Remove all double quotes of user input string.
set "Folder=%Folder:"=%"
rem Was not only one or more double quotes entered by the user?
if not defined Folder goto UserPrompt
rem Create the folder with suppressing the error message.
md "%UserProfile%\Desktop\%Folder%" 2>nul
rem Could the folder name be created at all which means the user
rem input string was valid and the folder did not exist already?
if errorlevel 1 goto UserPrompt
rem Open the just created folder on user's desktop.
start "" "%UserProfile%\Desktop\%Folder%"
pause
rd "%UserProfile%\Desktop\%Folder%"
endlocal

代替命令行

start "" "%UserProfile%\Desktop\%Folder%"

也可以使用

%SystemRoot%\explorer.exe "%UserProfile%\Desktop\%Folder%"

或使用

%SystemRoot%\explorer.exe /e,"%UserProfile%\Desktop\%Folder%"

explorer.exe是将整个参数字符串括在双引号中的一般规则的例外。 "/e,%UserProfile%\Desktop\%Folder%"不起作用,因为在这种情况下,参数字符串将被解释为具有指向当前驱动器根目录的无效相对路径的文件夹,而不是选项/e且具有打开的文件夹。

但是Windows资源管理器不提供定义窗口位置和大小的选项。 Windows Explorer在打开文件夹的Explorer窗口时再次使用用户最后一次使用的,因此最有可能被用户偏爱的东西。

当然,可以使用其他代码向刚刚打开的资源管理器窗口(顶层前景窗口)发送一条更改窗口位置和大小的消息。参见例如:

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • if /?
  • md /?
  • pause /?
  • rd /?
  • rem /?
  • set /?
  • setlocal /?
  • start /?