【问题标题】:Read directories and split path读取目录和拆分路径
【发布时间】:2016-06-02 08:22:24
【问题描述】:

列出我使用的目录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。不知道在哪里可以查到这样的东西。

编辑:

%~nxfto get file names with extensions

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

%~fIExpands %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

【问题讨论】:

  • 转储此批次并将其转换为 Windows 脚本...
  • 你是说 Windows 脚本宿主?

标签: windows batch-file cmd directory


【解决方案1】:

括号中的内容是一行。因此,您必须使用!var!,您可以使用setlocal enabledelayedexpansion 打开它。请参阅set /?setlocal /?

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

所以c:\temp\..c:\ 相同

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

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

【讨论】:

  • 你看到我的编辑了吗?我用enabledelayedexpansion 试过了,但结果是一样的。
  • 必须使用!lastfolder! 而不是%lastfolder%
  • 原因是带感叹号的变量名是有效的 MSDos 变量。因此必须打开特殊模式。
猜你喜欢
  • 1970-01-01
  • 2021-04-23
  • 2013-08-24
  • 2017-05-31
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多