возникли проблемы с использованием пробелов в именах папок - PullRequest
0 голосов
/ 06 июня 2019

Когда пользователь вводит пробел в имени папки, я могу создать и удалить папку со следующим кодом, но строка для запуска или открытия папки не будет работать.

Я пробовал несколько разныхвещи.Если я использую «% 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 голосов
/ 07 июня 2019

Прочтите ответ на вопросе Как запретить интерпретатору команд Windows завершать выполнение пакетного файла при неправильном вводе пользователем? и замечания в приведенном ниже коде пакета, чтобы понять, почему этот код намного лучше для вашей задачи.

Обычно необходимо заключать всю строку аргумента в двойные кавычки, а не только ее части, как это видно ниже.

@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 Explorer не предлагает опций для определения положения и размера окна. Независимо от того, что пользователь использовал в прошлый раз и, следовательно, наиболее вероятно, что пользователь предпочитает его, Windows Explorer снова использует его при открытии окна Проводника для папки.

Разумеется, с помощью дополнительного кода можно было бы отправить в только что открытое окно проводника, являющееся окном верхнего уровня верхнего уровня, сообщение об изменении положения и размера окна. См. Например:

Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и полностью прочитайте все страницы справки, отображаемые для каждой команды.

  • echo /?
  • endlocal /?
  • if /?
  • md /?
  • pause /?
  • rd /?
  • rem /?
  • set /?
  • setlocal /?
  • start /?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...