我正在尝试在所有驱动器上查找特定文件夹。驱动器列表存储在变量“drive_letter”中,路径存储在由等号分隔的变量“loc”中。批处理文件必须检查驱动器和路径的所有组合,但是,下面的代码片段仅检查所有列出的驱动器上的第一个值,然后退出。
@echo off
set drive_letter=a b c d e f g h i j k l m n o p q r s t u v w x y z
set loc=T est=Te st=Tes t
FOR %%A in (%drive_letter%) do (
FOR /f "delims==" %%a in ("%%A:%loc%") do (
if exist "%%a" ( echo\ && echo Exists - "%%a" ) else ( echo Nonexistent - "%%a" )
)
)
pause>nul
期望:
Nonexistent - "c:T est"
Nonexistent - "d:T est"
Nonexistent - "e:T est"
Nonexistent - "f:T est"
Nonexistent - "g:T est"
Nonexistent - "h:T est"
Nonexistent - "i:T est"
Nonexistent - "j:T est"
Nonexistent - "k:T est"
Nonexistent - "l:T est"
Nonexistent - "m:T est"
Nonexistent - "n:T est"
Nonexistent - "o:T est"
Nonexistent - "p:T est"
Nonexistent - "q:T est"
Nonexistent - "r:T est"
Nonexistent - "s:T est"
Nonexistent - "t:T est"
Nonexistent - "u:T est"
Nonexistent - "v:T est"
Nonexistent - "w:T est"
Nonexistent - "x:T est"
Nonexistent - "y:T est"
Nonexistent - "z:T est"
Nonexistent - "c:Te st"
Nonexistent - "d:Te st"
Nonexistent - "e:Te st"
Nonexistent - "f:Te st"
Nonexistent - "g:Te st"
Nonexistent - "h:Te st"
Nonexistent - "i:Te st"
Nonexistent - "j:Te st"
Nonexistent - "k:Te st"
Nonexistent - "l:Te st"
Nonexistent - "m:Te st"
Nonexistent - "n:Te st"
Nonexistent - "o:Te st"
Nonexistent - "p:Te st"
Nonexistent - "q:Te st"
Nonexistent - "r:Te st"
Nonexistent - "s:Te st"
Nonexistent - "t:Te st"
Nonexistent - "u:Te st"
Nonexistent - "v:Te st"
Nonexistent - "w:Te st"
Nonexistent - "x:Te st"
Nonexistent - "y:Te st"
Nonexistent - "z:Te st"
Nonexistent - "c:Tes t"
Nonexistent - "d:Tes t"
Nonexistent - "e:Tes t"
Nonexistent - "f:Tes t"
Nonexistent - "g:Tes t"
Nonexistent - "h:Tes t"
Nonexistent - "i:Tes t"
Nonexistent - "j:Tes t"
Nonexistent - "k:Tes t"
Nonexistent - "l:Tes t"
Nonexistent - "m:Tes t"
Nonexistent - "n:Tes t"
Nonexistent - "o:Tes t"
Nonexistent - "p:Tes t"
Nonexistent - "q:Tes t"
Nonexistent - "r:Tes t"
Nonexistent - "s:Tes t"
Nonexistent - "t:Tes t"
Nonexistent - "u:Tes t"
Nonexistent - "v:Tes t"
Nonexistent - "w:Tes t"
Nonexistent - "x:Tes t"
Nonexistent - "y:Tes t"
Nonexistent - "z:Tes t"
实际结果:
Nonexistent - "c:T est"
Nonexistent - "d:T est"
Nonexistent - "e:T est"
Nonexistent - "f:T est"
Nonexistent - "g:T est"
Nonexistent - "h:T est"
Nonexistent - "i:T est"
Nonexistent - "j:T est"
Nonexistent - "k:T est"
Nonexistent - "l:T est"
Nonexistent - "m:T est"
Nonexistent - "n:T est"
Nonexistent - "o:T est"
Nonexistent - "p:T est"
Nonexistent - "q:T est"
Nonexistent - "r:T est"
Nonexistent - "s:T est"
Nonexistent - "t:T est"
Nonexistent - "u:T est"
Nonexistent - "v:T est"
Nonexistent - "w:T est"
Nonexistent - "x:T est"
Nonexistent - "y:T est"
Nonexistent - "z:T est"
您的代码完全按照您的指示执行。
for/f 的默认值是 tokens=1
这就是您只处理第一个位置的原因。
但即使您纠正此问题并处理所有三个位置,您也不会获得预期的输出。
您的代码请求:对于所有驱动器,给出所有位置的结果。
即:第一个驱动器号和第一个位置
第一个驱动器号和第二个位置
第一个驱动器号和第三个位置
第二个驱动器号与第一个位置
等等
接下来是您的代码,经过更改以处理所有位置。
@echo off
set drive_letter=a b c d e f g h i j k l m n o p q r s t u v w x y z
set loc=T est=Te st=Tes t
FOR %%A in (%drive_letter%) do (
echo "%%A:%loc%"
FOR /f "tokens=1-3 delims==" %%a in ("%%A:%loc%") do (
echo [%%A] [%%a] [%%b] [%%c]
if exist "%%a" ( echo\ && echo Exists - "%%a" ) else ( echo Nonexistent - "%%a" )
if exist "%%b" ( echo\ && echo Exists - "%%b" ) else ( echo Nonexistent - "%%b" )
if exist "%%c" ( echo\ && echo Exists - "%%c" ) else ( echo Nonexistent - "%%c" )
)
)
pause>nul
您的预期输出表明您想要的是: 对于所有位置,给出所有驱动器的结果。
需要的调整是:
将 2 切换为命令。
将 for/f 更改为不带 /f 的 for
两者本质上是相同的。 for with 的位置只是不同,因为这些是带有空格的字符串,所以你必须将这些字符串封装在双引号中。
在驱动器和位置之间添加反斜杠,以便脚本将使用完整路径进行搜索。
接下来是您可能想要创建的代码。
@echo off
set drive_letter=a b c d e f g h i j k l m n o p q r s t u v w x y z
set loc="T est","Te st","Tes t"
FOR %%a in (%loc%) do (
FOR %%A in (%drive_letter%) do (
rem echo [%%A] [%%a] [%%~a]
if exist "%%A:\%%~a" ( echo\ && echo Exists - "%%A:\%%~a" ) else ( echo Nonexistent - "%%A:\%%~a" )
)
)
pause>nul