2

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

但是,如果路径中至少有一个插入符号 (^),则它不起作用。例如,C:\one^two^^three^^^four^^^^carets\ 中的批处理包含

echo %~dp0

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

我怎样才能摆脱插入符号?

4

2 回答 2

6

您得到了正确的值,但是当您 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 off
setlocal enableDelayedExpansion
set "myPath=%~dp0"
echo !myPath!

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

@echo off
for %%A in ("%~dp0") do echo %%~A
于 2012-10-10T12:27:13.047 回答
0

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

echo !dp0

不知道能不能兼容quote-stripping~

于 2012-10-10T11:32:08.703 回答