我需要文件夹的完整路径,因为它有.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%
但它没有用。
如何从搜索结果中删除最后一个?
答案 0 :(得分:1)
sub-string expansion syntax仅适用于普通环境变量,但不适用于for
变量引用。要应用该语法,您需要首先将值赋给变量:
for /R %i in ("*.txt") do @(set "VAR=%~dpi" & echo/!VAR:~^,-1!)
但是,由于您在代码块(循环)中编辑变量值,因此需要启用并应用delayed variable expansion。这可以通过cmd /V:ON
或cmd /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!
)