Windows上的批处理文件(XP及更高版本)需要知道它所在目录的名称。只有文件夹名称,而不是整个路径,而不是批处理文件名本身。
因此,存储在C:\ temp \ abc \ script.cmd中的文件应该在变量中得到名称“abc”。
怎么办呢?
像%~p0
这样的常用参数扩展只能提取整个路径(\ temp \ abc \),它们只能处理真实参数(%0,%1,%2 ...)而不能处理其他变量,所以它们不能堆叠或组合。所以他们对这项任务太有限了。 for
命令只能从开头处定位到定义位置的标记,而不是“最后”或倒数第二个标记。
为了简化执行和可移植性,它必须是批处理文件(.cmd),而不是PowerShell。
答案 0 :(得分:8)
只要您拥有文件的完整路径,就可以简单地附加\..
并使用带有正确修饰符的FOR循环来获取父文件夹名称。
for %%A in ("%~f0\..") do set "myFolder=%%~nxA"