cmd-Remove last\从搜索的文件夹中删除

cmd-Remove last\从搜索的文件夹中删除,cmd,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

我需要文件夹的完整路径,因为它有.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
我试过了

但它不起作用


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

请确保启用延迟扩展,以便在循环中重新计算
p
变量

SETLOCAL ENABLEDELAYEDEXPANSION

for /r %%i in (*.txt) do (
    SET "P=%%~dpi"
    echo !P:~0,-1!
)
仅适用于普通环境变量,但不适用于变量引用。要应用该语法,需要首先将值分配给变量:

(*.txt)do@(设置“VAR=%~dpi”&echo/!VAR:~^,-1!)中的/R%i的

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


另一个更好的解决方案是通过将
附加到路径(表示当前目录)并使用另一个
for
循环通过变量引用的类型解析路径来避免字符串操纵和延迟变量扩展,如下所示:

for/R%i in(“*.txt”)do@for%j in(“%~dpi”)do@echo/%~fj

避免了包含空格或其他令牌分隔符的路径出现问题(
,…)。

不适用于
对于
变量引用,您需要改用普通环境变量;在代码块或循环中编辑变量值时请注意使用!这是批处理文件代码/语法,不是直接用于
cmd
,因此需要将
%
-符号加倍!但是,这个问题没有被标记……我不知道为什么,但对我有效的代码是(“*.txt”)中的/R%I以“%~dpi.”中的%j的速度做[at rate])做[at rate]echo%~fjIt工作,因为像
D:\Testfolder\\u dn\first\.
(注意附加的点)这样的路径与
D:\Testfolder\\u dn\first
相同,而
~f
解决了这样的问题。。。
SETLOCAL ENABLEDELAYEDEXPANSION

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