Windows 读取目录和拆分路径

Windows 读取目录和拆分路径,windows,batch-file,cmd,directory,Windows,Batch File,Cmd,Directory,要列出我使用的目录,请执行以下操作: 要拆分我使用的文件路径,请执行以下操作: 现在我想把这两个部分放在一起: @echo off set folder=C:\Windows for /d %%A in ("%folder%\*") do ( for %%d in (%%~fA) do set lastfolder=%%~nxf echo %lastfolder% ) 我得到的结果是%~nxf。我尝试了一些方法,但没有得到正确的结果。我做错了什么 在这些示例中,我不理解的是

要列出我使用的目录,请执行以下操作:

要拆分我使用的文件路径,请执行以下操作:

现在我想把这两个部分放在一起:

@echo off

set folder=C:\Windows

for /d %%A in ("%folder%\*") do (
    for %%d in (%%~fA) do set lastfolder=%%~nxf
    echo %lastfolder%
)
我得到的结果是
%~nxf
。我尝试了一些方法,但没有得到正确的结果。我做错了什么

在这些示例中,我不理解的是
%~fA
%~nxf
。不知道在哪里可以找到这样的东西

编辑:

%~nxf

其中F是变量,~n是对其名称的请求|

%~fI

现在,我用新信息修改了代码:

@echo off

for /d %%A in ("%folder%\*") do (
    for %%D in (%%~fA) do (
        set lastfolder=%%~nxD
        echo %lastfolder%
    )
)
现在我得到的结果是最后一个文件夹,但它的打印次数与现有子文件夹的打印次数相同。所以我只得到最后一个。我如何迭代每一个

解决方案:

感谢bgalea,这是我的解决方案:

@echo off
setlocal enabledelayedexpansion

set folder=C:\Windows

for /d %%A in ("%folder%\*") do (
    for %%D in (%%~fA) do (
        set lastfolder=%%~nxD
        echo !lastfolder!
    )
)

endlocal

括号中的内容是一行。因此,您必须使用
!瓦尔setlocal enabledelayedexpansion
打开的代码>。请参见
set/?
setlocal/?

是当前目录,
是父目录

所以
c:\temp\..
c:\

%~nx1
etc记录在call命令的帮助中-
call/?


我的答案中有一个命令提示标点符号列表。

您看到我的编辑了吗?我尝试了
启用延迟扩展
和不启用,但结果是一样的。必须使用
!最后一个文件夹不是
%lastfolder%
原因是带有感叹号的变量名是有效的MSDos变量。因此必须打开特殊模式。转储此批并将其转换为Windows脚本…你是说Windows脚本主机?
@echo off

for /d %%A in ("%folder%\*") do (
    for %%D in (%%~fA) do (
        set lastfolder=%%~nxD
        echo %lastfolder%
    )
)
@echo off
setlocal enabledelayedexpansion

set folder=C:\Windows

for /d %%A in ("%folder%\*") do (
    for %%D in (%%~fA) do (
        set lastfolder=%%~nxD
        echo !lastfolder!
    )
)

endlocal