Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 7 在cmd中,如何获取名称中带有插入符号的文件夹的路径_Windows 7_Batch File_Path_Cmd_Caret - Fatal编程技术网

Windows 7 在cmd中,如何获取名称中带有插入符号的文件夹的路径

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 我不知道它是否与引号剥离兼容~您得到的是正确的值,但当您回显值时,它必须经过另一层解析。无引号的^是批转义字符,用于将有意义的特殊字符(如&和|)转换为简单的文字字符。未加

在Windows7的cmd中,我知道%dp0给出了批处理文件的文件夹路径,如

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

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