2017-02-20 14 views
1

Если я запустил что-то, возвращающееся с & или другим символом, имеющим особое значение, и я пытаюсь использовать его в скрипте, как бы я его избежал?Экранирование выходов в CMD

Примером может быть, если бы я поделился локальной учетной записью с кем-то на том же компьютере, и у меня было имя пользователя, которое говорит John & Matt. Ввод пакетного файла в директории Desktop, что было что-то вроде этого:

@ECHO OFF 
echo %~dp0 

Было бы вернуть что-то вроде этого:

C:\Users\John 
The system cannot find the path specified. 

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

EDIT: Я не уточнил это достаточно раньше. Извини за это. Не очень хорошо объяснить, но если я пытаюсь использовать% ~ DP0 в переменной, и стек больше вещей на вершине, что-то вроде

SETLOCAL 
set loc=%~dp0 
rename "%~dp0Dir\Dir1\Dir2\File.txt" "Something.txt" 

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

Пакетный файл, который я пытался создать, в основном удаляет файл, в котором находится командный файл, заменяет его другим файлом в подпапке, находящейся внутри каталога, где находится командный файл, и переименовывает его в другое.

+0

Я не понимаю вашего редактирования. Почему вы устанавливаете 'loc' в'% ~ dp0'? В этом случае вы можете просто установить '% CD%' в '% ~ dp0' и использовать' Ren Dir \ Dir1 \ Dir2 \ File.txt "« Something.txt »'. – Compo

+0

Я новичок в создании пакетных файлов, поэтому я понятия не имел, что% CD% сделал что-то вроде этого.Я буду помнить об этом, когда я пытаюсь создать новый командный файл, который много играет с каталогами. –

+0

Используйте этот синтаксис: 'set 'loc =% ~ dp0 "' - кавычки не становятся частью значения здесь, но некоторые специальные символы (например, '&') скрыты от 'cmd' должным образом ... – aschipfl

ответ

2

Если вы хотите надежно ECHO значение без ограждающих кавычки, то вы можете использовать любой из следующих стратегий:

@echo off 
:: Use a FOR loop 
for %%F in ("%~dp0") do echo %%~F 

:: Use delayed expansion. 
:: Note that delayed expansion must be enabled after assignment of fullPath, 
:: else any ! within path will be corrupted during the assignment. 
set "fullPath=%~dp0" 
setlocal enableDelayedExpansion 
echo !fullPath! 
0
@ECHO OFF 
echo %dp0 

вернется DP0 - Я предполагаю, что вы имеете в виду% ~ dp0 ;-)

Однако echo "%~dp0" Выведет C:\Users\John & Matt\...

Кстати, это \, а не/.

Окна: \

Unix/Linux:/

Я не будучи педантом, иногда это вызывает серьезные проблемы (как here).

+0

Было вроде бы торопиться, не исправить ошибки. Извините, что я отредактирую это. –

+0

@RoastChicken На самом деле, это исправляет ошибку. Если это всего лишь эхо, окружающая ваша переменная с кавычками работает нормально. – MichaelS

+0

Извините, если я не уточнил, но мне нужно было используйте переменную% ~ dp0.Помещение кавычек приведет к зависанию переменной, так как мне нужно добавить больше вещей поверх пути, который он мне дает. Например, я делаю что-то вроде этого: set loc =% ~ dp0 и позже, мне нужно положить% loc% Dir1 \ Dir2 \ Program.exe –