在 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\
我怎样才能摆脱插入符号?
在 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\
我怎样才能摆脱插入符号?
您得到了正确的值,但是当您 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
您是否尝试过延迟变量扩展?
echo !dp0
不知道能不能兼容quote-stripping~