19

我正在写一个批处理文件,我需要获取这个bat文件的父文件夹。有可能吗?注意我的意思是批处理文件的父文件夹不是调用该批处理的提示的当前目录。

谢谢

4

4 回答 4

42

批处理的父文件夹%~dp0位于变量中。例子:

@echo off&setlocal
for %%i in ("%~dp0.") do set "folder=%%~fi"
echo %folder%
于 2013-05-18T11:55:42.563 回答
4

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%

V2

for %%I in ("%~dp0\.") do set ParentFolderName=%%~nxI
echo %ParentFolderName%

V1

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

for %%I in (..) do set ParentFolderName=%%~nI%%~xI
echo %ParentFolderName%

参考:对于 | 微软文档

于 2020-02-03T19:55:35.100 回答
2

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

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

输出将是

C:\Users\Public\
C:\Users\Public\..\
C:\Users\
于 2021-04-14T16:47:19.870 回答
0

所以这是一个糟糕的答案,但我现在使用它的次数比我承认的要多:

powershell -command "(get-item '%~dp0').name" > %temp%\temp_var.txt
set /p parent_folder= < %temp%\temp_var.txt
echo %parent_folder%
pause

由于近来 PowerShell 在 Windows 中几乎无处不在,因此我尽可能多地滥用它。

但是,这很糟糕,因为它确实依赖于环境路径中存在的 PowerShell,并且它不依赖于在脚本写入和读取之间修改临时存储文件的其他脚本。

于 2021-12-23T20:49:02.057 回答