Обработка конечной обратной косой черты и имен каталогов с пробелами в пакетных файлах - PullRequest
3 голосов
/ 04 марта 2011

Это вариант этого вопроса: Удалить косую черту из ввода пакетного файла

но это немного отличается, так что я не думаю, что это обман.

У меня проблемы с выполнением этой работы с каталогами, в которых есть пробелы (работает WinXP).

:START
@echo What folder do you want to process? (Provide a path without a closing backslash)
set /p datapath=

::Is string empty?
IF X%datapath% == X GOTO:START

::Does string have a trailing slash? if so remove it 
IF %datapath:~-1%==\ SET datapath=%datapath:~0,-1%

echo %datapath%

Обрабатывает:

c:\

правильно (обрезка до c:)

Но если вы введете:

c:\test space

ошибка в том, что "пространство было неожиданным в это время."

Если вы попытаетесь ввести:

"c:\test space"

Вы получаете ту же ошибку.

Я думал, что это будет включать стратегически расположенных "или два в этой строке:

IF %datapath:~-1%==\ SET datapath=%datapath:~0,-1%

Но мне не повезло.

Есть идеи?

1 Ответ

2 голосов
/ 04 марта 2011

Вы можете решить это с отложенным расширением, потому что отложенное расширение работает не так, как процентное расширение.

:START
setlocal EnableDelayedExpansion
@echo What folder do you want to process? (Provide a path without a closing backslash)
set /p datapath=

::Is string empty?
IF X!datapath! == X GOTO:START

::Does string have a trailing slash? if so remove it 
IF !datapath:~-1!==\ SET "datapath=!datapath:~0,-1!"

echo !datapath!

Расширяется позже, чем расширение процентов , и после отложенного расширения не болееанализ выполнен, поэтому даже пробелы или специальные символы имеют какой-либо эффект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...