在cmd中,如何在名称中使用插入符号获取文件夹的路径

时间:2012-10-10 11:04:42

标签: windows-7 batch-file path cmd caret

在Windows 7的cmd中,我了解%~dp0 给出批处理文件的文件夹路径,如 How to get folder path from file path with CMD

但是,如果路径中至少有一个插入符号(^),则它不起作用。例如,一个批次在C:\ one ^ two ^^三个^^^四个^^^^ carets \含

echo %~dp0

给出

C:\onetwo^three^four^^carets\

如何逃脱插入符?

2 个答案:

答案 0 :(得分:4)

您获得了正确的值,但是当您ECHO值时,它必须经过另一层解析。不带引号的^是批量转义字符,用于将具有含义的&|等特殊字符转换为简单的字面字符。无论什么字符跟随,一个不带引号的插入符都会被丢弃并且插入符号。

如果您只是简单地使用字符串文字ECHO,那么您将获得完全相同的结果:

echo C:\one^two^^three^^^four^^^^carets\

产量

C:\onetwo^three^four^^carets\

您可以通过引用字符串来保护插入符,但随后您会在ECHO结果中获得引号:

echo "%~dp0"

您可以轻松地将原始值传输到环境变量而不使用插入符号,并使用SET查看结果来证明它:

@echo off
setlocal
set "myPath=%~dp0"
set myPath

如果您想要ECHO只是没有引号的值,您可以使用延迟扩展。这是有效的,因为在解析特殊字符后会发生延迟扩展:

@echo off
setlocal enableDelayedExpansion
set "myPath=%~dp0"
echo !myPath!

您也可以通过将值传输到FOR变量来获得相同的结果。在特殊字符解析后,FOR变量的扩展也会发生:

@echo off
for %%A in ("%~dp0") do echo %%~A

答案 1 :(得分:0)

您是否尝试过延迟变量扩展?

echo !dp0

我不知道它是否与quote-stripping兼容