如何获取Windows批处理的父文件夹

Tob*_*bia 14 windows directory batch-file parent

我正在编写批处理文件,我需要获取此bat文件的父文件夹.有可能吗?NB我是指批处理文件的父文件夹,而不是调用该批处理的提示的当前目录.

谢谢

End*_*oro 33

Batch的父文件夹%~dp0位于Variable中.例:

@echo off&setlocal
for %%i in ("%~dp0.") do set "folder=%%~fi"
echo %folder%
Run Code Online (Sandbox Code Playgroud)

  • 是的,没关系.`c:\ test123\test.bat`的文件夹是`test123`,父文件夹在你的情况下是"c:\" (3认同)
  • 不行,可能我忘了说是windows的批处理 (2认同)
  • 是的我知道.我的答案是纯批次.将记事本放在文本文件中,例如命名.`mybatch.bat`并从命令行启动它.如果从资源管理器启动它,请在结尾处输入"pause". (2认同)
  • 您需要删除(“〜dp0 ..”)中的两个点,因为它们将使目录向上移动一个。问题是如何找到批处理的父文件夹而不是partent的文件夹父文件夹... (2认同)

ASd*_*deL 8

如果你想要批处理文件所在的文件夹,可以指定

SET folder=%~dp0

正如另一个答案中提到的。

如果您想要批处理文件位置上方的文件夹,您可以指定

SET folder=%~dp0..\

但是,如果您打算向用户显示路径,那么最后一个变量可能不够。在这种情况下,也许最好

FOR %%A IN ("%~dp0.") DO SET folder=%%~dpA

例如,如果您有以下脚本C:\Users\Public

@ECHO OFF
ECHO %~dp0
ECHO %~dp0..\
FOR %%A IN ("%~dp0.") DO ECHO %%~dpA
Run Code Online (Sandbox Code Playgroud)

输出将是

C:\Users\Public\
C:\Users\Public\..\
C:\Users\
Run Code Online (Sandbox Code Playgroud)


cpc*_*lla 7

Endoro 的答案对我也不起作用,但这确实有效。这就是我用自己做的事情。

V3

其中之一应该做正确的事情

for %%I in ("%~dp0.") do for %%J in ("%%~dpI.") do set ParentFolderName=%%~nxJ
echo %ParentFolderName%

for %%I in ("%~dp0.") do for %%J in ("%%~dpI.") do set ParentFolderName=%%~dpnxJ
echo %ParentFolderName%
Run Code Online (Sandbox Code Playgroud)

V2

for %%I in ("%~dp0\.") do set ParentFolderName=%%~nxI
echo %ParentFolderName%
Run Code Online (Sandbox Code Playgroud)

V1

这个获取当前工作目录的父目录

for %%I in (..) do set ParentFolderName=%%~nI%%~xI
echo %ParentFolderName%
Run Code Online (Sandbox Code Playgroud)

参考:对于| 微软文档

  • 这是当前工作文件夹的父文件夹,而不是批处理文件的父文件夹(它们可以相同,但不能保证)。(顺便说一句:`%%~nI%%~xI`可以缩写为`%%~nxI`) (2认同)