好的,我想要一个批处理文件来检测它是否能找到它所居住的文件,而不是其他任何东西。
例如:我从变量%~dp1。
接收路径(Down)C:\用户\%USERNAME%\桌面\文件\ file1.bat
但我想要做的是接收其目录的这一部分" \ File \",并检查批处理文件是否可以找出该目录是否真的存在。
答案 0 :(得分:2)
for %%a in ("%~dp0\..") do SET "parent=%%~nxa"
ECHO(%parent%
因为我们知道我们是从一个可能有父节点的目录运行的,所以如果父节点是根节点或批处理节点位于根节点,则会将parent
设置为 nothing
答案 1 :(得分:0)
获取批处理文件的父目录。我知道我们已经多次报道了这一点,但我无法找到问题。
for %%a in ("%~dp0\.") do for %%b in ("%%~dpa\.") do echo %%~nxb
答案 2 :(得分:0)
这是一个解决方案,没有为root文件编写解决方案。
变量f
是我相信你要求的。
<强> foo.cmd 强>
@echo off
setlocal
::: p parent
::: g grandparent
::: a grandparent absolute
::: f folder of this batch file
set p=%~dp0
set g=%~dp0\..
FOR /F "delims=" %%t IN ("%g%") DO SET "a=%%~ft"
call set f=%%p:%a%=%%
call set f=%%f:\=%%
echo p is: %p%
echo g is: %g%
echo a is: %a%
echo f is: %f%
endlocal
测试用例
L:\test>foo.cmd
p is: L:\test\
g is: L:\test\\..
a is: L:\
f is: test
L:\test>md subdir
L:\test>cd subdir
L:\test\subdir>..\foo.cmd
p is: L:\test\
g is: L:\test\\..
a is: L:\
f is: test
L:\test\subdir>copy ..\foo.cmd
1 file(s) copied.
L:\test\subdir>foo.cmd
p is: L:\test\subdir\
g is: L:\test\subdir\\..
a is: L:\test
f is: subdir
L:\test\subdir>cd..
L:\test>cd..
L:\>copy test\foo.cmd
1 file(s) copied.
L:\>foo.cmd
p is: L:\
g is: L:\\..
a is: L:\
f is: \=
答案 3 :(得分:0)
这将返回正在运行的批处理文件的目录名称(无路径):
@echo off
for %%a in ("%~dp0\.") do echo %%~nxa
Magoo有点不对劲:。不.. ..
如果你不在文件名/目录中使用空格,另一种选择是:
@echo off
set p=%~p0
for %%x in (%p:\= %) do set dir=%%x
echo %dir%