在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\
如何逃脱插入符?
答案 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兼容