我有这样的文件树:
C:UsersuserAppDataLocalapp-packageblabla
C:UsersuserAppDataLocalapp-packageblablasomething
C:UsersuserAppDataLocalapp-packageapp-1.1.6
C:UsersuserAppDataLocalapp-packageapp-1.1.6resources
C:UsersuserAppDataLocalapp-packageapp-1.1.6resourcesapp.package.unpacked
C:UsersuserAppDataLocalapp-packageapp-1.1.6resourcesapp.package.unpackeddaemon
我试过命令
D:tmp>dir /B/S/AD "%LOCALAPPDATA%app-packageapp*"
预期:
C:UsersuserAppDataLocalapp-packageapp-1.1.6
C:UsersuserAppDataLocalapp-packageapp-1.1.6resources
C:UsersuserAppDataLocalapp-packageapp-1.1.6resourcesapp.package.unpacked
C:UsersuserAppDataLocalapp-packageapp-1.1.6resourcesapp.package.unpackeddaemon
实际输出:
C:UsersuserAppDataLocalapp-packageapp-1.1.6
C:UsersuserAppDataLocalapp-packageapp-1.1.6resourcesapp.package.unpacked
为什么会发生这种情况,我该如何解决?
您似乎认为通配符app*
只与给定目标目录中的项匹配,但实际上它与路径的最后一个元素匹配。这就解释了为什么:
dir /B/S/AD "%LOCALAPPDATA%app-packageapp*"
提供以下结果:
C:UsersuserAppDataLocalapp-packageapp-1.1.6 C:UsersuserAppDataLocalapp-packageapp-1.1.6resourcesapp.package.unpacked
将app*
更改为app-*
,输出将仅为:
C:UsersuserAppDataLocalapp-packageapp-1.1.6
我认为您需要以下内容:
pushd "%LOCALAPPDATA%app-package" && (for /F "eol=| delims=" %I in ('dir /B /A:D-H-S "app-*"') do @echo(%~fI& dir /S /B /A:D-H-S "%I" & popd)
为了更好地理解它的作用,这里有一个带有一些解释性注释的批处理文件版本:
@echo off
rem // Change into the target directory:
pushd "%LOCALAPPDATA%app-package" && (
rem // Loop through matching directories within target directory:
for /F "eol=| delims=" %%I in ('dir /B /A:D-H-S "app-*"') do (
rem // Return matching sub-directory itself:
echo(%%~fI
rem // Return contents of matching sub-directory:
dir /S /B /A:D-H-S "%%I"
)
rem // Return from the target directory:
popd
)