cmd - 从搜索到的文件夹中删除最后一个\

时间:2018-03-20 13:19:13

标签: cmd

我需要文件夹的完整路径,因为它有.txt文件

目前我正在使用以下命令

D:\Testfolder\_dn>for /r %i in (*.txt) do @echo %~dpi

获得以下输出

D:\Testfolder\_dn\2nd\
D:\Testfolder\_dn\3rd\
D:\Testfolder\_dn\4th\
D:\Testfolder\_dn\5th\
D:\Testfolder\_dn\first\

但我希望输出如下

D:\Testfolder\_dn\2nd
D:\Testfolder\_dn\3rd
D:\Testfolder\_dn\4th
D:\Testfolder\_dn\5th
D:\Testfolder\_dn\first

我尝试了remove last characters string batch

for /r %i in (*.txt) do @echo %~dpi:~0,-1%

但它没有用。

如何从搜索结果中删除最后一个?

2 个答案:

答案 0 :(得分:1)

sub-string expansion syntax仅适用于普通环境变量,但不适用于for变量引用。要应用该语法,您需要首先将值赋给变量:

for /R %i in ("*.txt") do @(set "VAR=%~dpi" & echo/!VAR:~^,-1!)

但是,由于您在代码块(循环)中编辑变量值,因此需要启用并应用delayed variable expansion。这可以通过cmd /V:ONcmd /V打开命令行实例来建立。但是,当路径包含! - 符号时,这仍然会导致问题。

另一种更好的解决方案是通过将.附加到路径(表示当前目录)并使用另一个for循环来解析for /R %i in ("*.txt") do @for %j in ("%~dpi.") do @echo/%~fj 路径来避免字符串操作和延迟变量扩展。 3}}变量引用,如下所示:

""

,避免了包含 SPACEs 或其他令牌分隔符(;=error behaviour,...)的路径出现问题。

答案 1 :(得分:0)

请务必启用延迟扩展,以便在循环中重新评估P变量。

SETLOCAL ENABLEDELAYEDEXPANSION

for /r %%i in (*.txt) do (
    SET "P=%%~dpi"
    echo !P:~0,-1!
)