列出我使用的目录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
答案 0 :(得分:1)
支架中的东西是一行。因此,您必须使用!var!
来启用setlocal enabledelayedexpansion
。请参阅set /?
和setlocal /?
。
.
是当前目录,..
是父目录。
因此c:\temp\..
与c:\
%~nx1
等记录在call命令的帮助 - call /?
我的回答Trouble with renaming folders and sub folders using Batch有一个命令提示符标点符号列表。