【发布时间】:2013-05-13 11:48:06
【问题描述】:
我正在写一个批处理文件,我需要获取这个bat文件的父文件夹。有可能吗? 注意我的意思是批处理文件的父文件夹不是调用该批处理的提示的当前目录。
谢谢
【问题讨论】:
标签: windows batch-file directory parent
我正在写一个批处理文件,我需要获取这个bat文件的父文件夹。有可能吗? 注意我的意思是批处理文件的父文件夹不是调用该批处理的提示的当前目录。
谢谢
【问题讨论】:
标签: windows batch-file directory parent
批处理的父文件夹位于变量%~dp0 中。示例:
@echo off&setlocal
for %%i in ("%~dp0.") do set "folder=%%~fi"
echo %folder%
【讨论】:
mybatch.bat 并从命令行启动它。如果从资源管理器启动,请在末尾添加pause。
c:\test123\test.bat 中,代码与上面完全相同。当我运行它时,我得到输出c:\
c:\test123\test.bat 的文件夹是 test123,父文件夹在你的情况下是 "c:\"
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)
C:\Projects\User1\batchFiles\myFile.bat,您的解决方案仅提取batchFiles
batchfiles 是“批处理文件的文件夹”,其父文件夹是 User1,但 OP 似乎有不同的定义)
%~dp0 已经包含了尾部反斜杠,所以 %~dp0\. 没有意义。
如果要批处理文件所在的文件夹,可以指定
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,并且它不依赖于在脚本写入和读取之间修改临时存储文件的其他脚本。 p>
【讨论】: