我正在编写一个批处理文件,需要获取此bat文件的父文件夹。这是可能的吗?注意,我指的是批处理文件的父文件夹,而不是调用该批处理文件的提示符当前目录的父文件夹。
谢谢
谢谢
批处理文件的父文件夹在变量%~dp0
中。例如:
@echo off&setlocal
for %%i in ("%~dp0.") do set "folder=%%~fi"
echo %folder%
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\
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%
%%〜nI%%〜xI
可以缩短为 %%〜nxI
) - StephanC:\Projects\User1\batchFiles\myFile.bat
,您的解决方案仅提取 batchFiles
。 - jeb所以这是一个糟糕的答案,但是现在我用它的次数比我愿意承认的要多:
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 存在于您的环境路径中,并且依赖于没有其他脚本在您的脚本写入和读取之间修改您的临时存储文件。
mybatch.bat
,并从命令行启动它。如果您从资源管理器启动它,请在末尾加上pause
。 - Endoroc:\test123\test.bat
中,代码与上面完全一样。当我运行它时,输出为c:\
。 - Northstriderc:\test123\test.bat
的文件夹是test123
,在你的情况下父文件夹是 "c:"。 - Endoro