读取目录和拆分路径

时间:2016-02-20 19:04:36

标签: windows batch-file cmd directory

列出我使用的目录this

set folder=C:\temp
for /d %%a in ("%folder%\*") do (
    echo %%~fa
)

要分割文件路径,我使用this

for %%f in (%MYDIR1%) do set myfolder=%%~nxf
echo %myfolder%

现在我想把两者放在一起:

@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 to get file names with extensions

  

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

%~fI Expands %I to a fully qualified path name.

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

@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

1 个答案:

答案 0 :(得分:1)

支架中的东西是一行。因此,您必须使用!var!来启用setlocal enabledelayedexpansion。请参阅set /?setlocal /?

.是当前目录,..是父目录。

因此c:\temp\..c:\

相同

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

我的回答Trouble with renaming folders and sub folders using Batch有一个命令提示符标点符号列表。