繁体   English   中英

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

[英]How to get windows batch's parent folder

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

谢谢

Batch 的父文件夹位于变量%~dp0 例子:

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

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%

参考: 对于 | 微软文档

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

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\

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

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,并且它不依赖于在脚本写入和读取之间修改临时存储文件的其他脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM