在批处理文件中,如何在没有其余目录的情况下找到它所在的特定文件夹?

时间:2016-01-06 03:55:30

标签: windows batch-file

好的,我想要一个批处理文件来检测它是否能找到它所居住的文件,而不是其他任何东西。

例如:我从变量%~dp1。

接收路径(Down)

C:\用户\%USERNAME%\桌面\文件\ file1.bat

但我想要做的是接收其目录的这一部分" \ File \",并检查批处理文件是否可以找出该目录是否真的存在。

4 个答案:

答案 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%