批处理文件返回一步

10 浏览
0 Comments

批处理文件返回一步

我正在编写一个批处理文件,我想将一些文件从根路径移动到cd ..根目录。

我使用%~dp0来找到根路径。

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

非常感谢。

0
0 Comments

Batch file to go one step back(批处理文件向后退一步)问题的出现的原因是不清楚如何在批处理文件中返回上一级目录,并且对一些批处理文件的语法和操作不理解。解决方法是使用特定的批处理语法和命令来解析路径,并正确使用相关修饰符。

在批处理文件中,%~dp0 表示当前批处理文件的父目录(包括一个尾部的 \),因此 %~dp0.. 表示批处理文件的父目录的父目录。可以使用 for 循环和变量引用的 ~f 修饰符(%%I)来解析路径:

for %%I in ("%~dp0..") do echo/%%~fI

另外,除了打字错误外,回答中还有一些问题。例如,%~dp0. 是否指向父目录,%~dp0... 是否指向曾祖父目录等等。如果 %~dp0 展开为驱动器(d)和路径(p)到当前批处理文件的父目录,并带有尾部的 \ ,那么为什么需要使用 ~f 修饰符呢?难道不是在括号评估期间展开 "%~dp0..",因此将完全展开的驱动器和路径传递给字符串作为变量 "%%I" 吗?为什么还需要使用 ~f 进行另一次展开呢?

此外,为什么 %~dp0.. 会自动解析?%~dp0 只是展开为当前批处理文件的父目录的驱动器(d)和路径(p),无论你在前面还是后面添加什么,比如 ..。一个 . 表示同一个目录(所以 anydir\middir\subdiranydir\middir\subdir\. 是相同的),.. 表示父目录(所以 anydir\middir\subdir\.. 是相同的 anydir);没有 ...(如果要指向 anydir,需要使用 anydir\middir\subdir\..\..)...

最后,关于 "括号评估" 是什么意思?你是说 for 自动解析 in 后面的部分吗?不,它不会自动解析类似于 anydir\middir\subdir\..\.\..\file.ext 的路径,它只会在最后一个路径元素(最后一个 \ 后面)出现通配符(*?)时解析;你需要使用 ~f 修饰符才能解析路径;请注意,for 不会访问文件系统来检查路径是否真实存在,除非包含通配符...

0
0 Comments

在批处理文件中,有时需要返回上一级目录。下面的代码提供了两种方法来实现这一目的。

第一种方法是使用%~dp0..。这将返回当前批处理文件所在目录的上一级目录。

第二种方法是通过以下代码来实现完全解析:

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

这段代码将调用一个名为resolve的子程序,并将当前批处理文件所在目录的上一级目录作为参数传递给它。然后,resolve子程序使用echo %~f1来输出解析后的上一级目录的完整路径。

如果要了解更多详细信息,请参考这个Stack Overflow回答

0