擅长:python、mysql、java
<p>for循环的问题是它在字符串的末尾留下了尾随的“/”。如果要多次获取dirname,这将导致问题。也许您需要获取目录的名称,该目录是包含该文件的目录的祖父母,而不仅仅是父目录。第二次简单地使用for循环技术将删除\,并且不会得到祖父母目录。</p>
<p>那就是你不能简单地做以下事情。</p>
<pre><code>set filename=c:\1\2\3\t.txt
for %%F in ("%filename%") do set dirname=%%~dpF
for %%F in ("%dirname%") do set dirname=%%~dpF
</code></pre>
<p>这将把dirname设置为“c:\1\2\3”,而不是“c:\1\2”。</p>
<p>下面的函数通过移除尾随的\来解决这个问题。</p>
<pre><code>:dirname file varName
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
SET _dir=%~dp1
SET _dir=%_dir:~0,-1%
endlocal & set %2=%_dir%
GOTO :EOF
</code></pre>
<p>它被称为如下。</p>
<pre><code>set filename=c:\1\2\3\t.txt
call :dirname "%filename%" _dirname
call :dirname "%_dirname%" _dirname
</code></pre>