Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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 获取批处理脚本中父目录的名称_Windows_Batch File_Cmd_Scripting - Fatal编程技术网

Windows 获取批处理脚本中父目录的名称

Windows 获取批处理脚本中父目录的名称,windows,batch-file,cmd,scripting,Windows,Batch File,Cmd,Scripting,假设我的目录结构是 C:\Program Files\abc\myscript.bat 因此,我想从myscript.bat中获得这个脚本的父名称,在本例中是abc 请注意,我不想要完整的父路径,我只想要像abc这样的父名称 实现这一点的简单方法是什么?最简单的代码可能是 对于(“%$p0.”)中的%%a,执行echo(%%~nxa 但是这段代码有一个故障点,因为您没有定义当批处理文件位于驱动器的根目录下时该怎么办,也就是说,当包含批处理文件的文件夹没有名称时该怎么办。您所需要的所有可能的重复

假设我的目录结构是

C:\Program Files\abc\myscript.bat

因此,我想从myscript.bat中获得这个脚本的父名称,在本例中是abc

请注意,我不想要完整的父路径,我只想要像abc这样的父名称


实现这一点的简单方法是什么?

最简单的代码可能是

对于(“%$p0.”)中的%%a,执行echo(%%~nxa

但是这段代码有一个故障点,因为您没有定义当批处理文件位于驱动器的根目录下时该怎么办,也就是说,当包含批处理文件的文件夹没有名称时该怎么办。

您所需要的所有可能的重复项是
echo%~dp0
设置“p=%P0”和
对于%%a in(“%p:~,-1%”)对%%a执行echo%%~Na
+1
操作(“%p0.”)执行echo“%%~nxa”
。然后,
D:\bat\SO\3242120.bat
返回
“SO”
D:\bat\3242120.bat
返回
“bat”
D:\3242120.bat
返回
。工作完美,没有故障点!@JosefZ,是的,代码在技术上是正确的,正如您所指出的,它没有故障,但是如果OP的代码依赖于我的代码,假设它将返回一个带有文件夹名称的字符串,但返回的是空字符串,那么OP代码可能会失败。有必要明确定义代码的运行方式如果没有这个定义,我所能做的就是警告。“JosefZ,简而言之,如果在<代码> C:\/<代码>或<代码> \MyServer \MyStuts,@ JordCasLMLAN,我们认为没有区别:<代码> C::32423120。BAT < /代码>和<代码> d:32423120。BAT < /代码>应该返回相同的零长度字符串。(但我不会弄脏我的
%SystemDrive%
根目录来检查它)。有趣的是:
\\myserver\myshare\3242120.bat
返回
myshare
,而
\\myserver\D$\3242120.bat
返回
D$
UNC
路径的更好的实践可以是
pushd\\myserver\myshare
(或
pushd\\myserver\D$
)然后使用
%\uuuuuuu cd\uuuuuuu%32423120.bat