2017-09-22 64 views
0

我在写一个批处理文件,我想将一些文件从根路径移动到cd .. root。批处理文件向后退一步

我使用%〜dp0来查找根路径。

什么是从根路径返回一步的最佳方法?

非常感谢

回答

0

你是几乎没有,只是用%~dp0..

,或者如果你想让它完全解决,用这一招

@echo off 
call :resolve "%~dp0.." 
goto :eof 

:resolve 
echo %~f1 
goto :eof 

一个解释,请参阅本SO回答https://stackoverflow.com/a/15568171/30447

1

%~dp0指向paren t当前批处理文件的目录(包括尾部\),%~dp0..因此指向批处理文件的祖父目录。

您可以使用for loop及其变量引用(%%I)的~f modifier解决路径:

for %%I in ("%~dp0..") do echo/%%~fI 
从错字
+0

除此之外,你的回答给我留下了更多的问题。 '%〜dp0.'指向父目录,'%〜dp0 ...'指向伟大的祖父母等。如果'%〜dp0'扩展为驱动器盘符和路径,为什么我需要使用'〜f'修饰符。在括号评估过程中''%〜dp0 ..“'没有扩展,因此将完全扩展的驱动器和路径作为变量'”%% I“'传递给一个字符串。为什么需要'〜f'的另一个扩展? – Compo

+0

@Compo,为什么'%〜dp0..'会自动解决?无论您预先添加还是附加任何类似“..”的文件,'%〜dp0'只是简单地扩展到驱动('d')和路径('p')到当前批处理文件的父目录,结尾为'\'。 '.'指向相同的目录(所以'anydir \ middir \ subdir'与'anydir \ middir \ subdir \ .'相同),'..'指向父目录(所以'anydir \ middir \ subdir \ ..'和'anydir'一样);没有'...'(你需要做'anydir \ middir \ subdir \ .. \ ..'指向'anydir')... – aschipfl

+0

@Compo,你是什么意思的“圆括号评估” ?你是说,'for'会自动解析'in'后面的部分?不,不是的;它不会解析类似于'anydir \ middir \ subdir \ .. \ .. \ .. \ file.ext'的路径,它只在最后一个路径元素出现时解决通配符('*','?')所以在最后'\'后面);您需要使用'〜f'修饰符来解析路径;注意'for'不访问文件系统来检查路径是否真正存在,除非包含通配符... – aschipfl