Windows 7 在cmd中,如何获取名称中带有插入符号的文件夹的路径
在Windows7的cmd中,我知道%dp0给出了批处理文件的文件夹路径,如 但是,如果路径中至少有一个插入符号(^),则不起作用。例如,C:\one^two^^^^ three^^^^^^ four^^^^插入符号\包含Windows 7 在cmd中,如何获取名称中带有插入符号的文件夹的路径,windows-7,batch-file,path,cmd,caret,Windows 7,Batch File,Path,Cmd,Caret,在Windows7的cmd中,我知道%dp0给出了批处理文件的文件夹路径,如 但是,如果路径中至少有一个插入符号(^),则不起作用。例如,C:\one^two^^^^ three^^^^^^ four^^^^插入符号\包含 echo %~dp0 给予 我怎样才能避开插入符号?您是否尝试过延迟变量扩展 echo !dp0 我不知道它是否与引号剥离兼容~您得到的是正确的值,但当您回显值时,它必须经过另一层解析。无引号的^是批转义字符,用于将有意义的特殊字符(如&和|)转换为简单的文字字符。未加
echo %~dp0
给予
我怎样才能避开插入符号?您是否尝试过延迟变量扩展
echo !dp0
我不知道它是否与引号剥离兼容~您得到的是正确的值,但当您回显值时,它必须经过另一层解析。无引号的
^
是批转义字符,用于将有意义的特殊字符(如&
和|
)转换为简单的文字字符。未加引号的插入符号后面的任何字符都将被转义并使用该插入符号
如果只回显字符串文字,则会得到完全相同的结果:
echo C:\one^two^^three^^^four^^^^carets\
屈服
C:\onetwo^three^four^^carets\
您可以通过引用字符串来保护插入符号,但随后会在回显结果中得到引号:
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”或“echo%!dp0”只会给出“!dp0”。没关系。我当时正在使用手机,所以无法测试。使用短文件名怎么样<代码>%~fs0好的,再来一次怎么样
%~dps0
这是使用短文件名的目录+路径,碰巧不包含^。谢谢!虽然它不能完全回答我最初的问题,%~dps0满足了我的需求。顺便说一下,%~fs0包含批处理文件名。+1用于详细解释和示例。“echo!myPath!”解决方案是正确的。其他两个字符串都用引号括起来。@Gnubie-Oops,谢谢!在上一个去掉引号的示例中,我缺少了~
。现在都修好了。
@echo off
for %%A in ("%~dp0") do echo %%~A