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