如果不存在则批处理从变量中取出驱动器号

时间:2013-08-22 21:44:15

标签: windows batch-file

批处理文件:

@echo off

echo.
echo Verifying existence of File

for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
  if exist %%d:\dir1\dir2\dir3\file1 (
     set BDCPATH=%%d:\dir1\dir2\dir3\file1
    ) else if exist %%d:\dir1_2\dir2\dir3\file1 (
     set BDCPATH=%%d:\dir1_2\dir2\dir3\file1
    )
)

echo %BDCPATH%
echo %BDCPATH%

IF NOT EXIST %BCDPATH% echo %BCDPATH%

goto :eof

当我回显'%BDCPATH%变量时,它会取出驱动器号。你能解释为什么会发生这种情况并解决这个问题吗?

cmd输出:

c:\Tools\KDNET_Helper>C:\Users\c_jamesp\Desktop\test1.bat

Verifying existence of BCD File
i:\dir1\dir2\dir3\file1
i:\dir1\dir2\dir3\file1
dir1\dir2\dir3\file1

2 个答案:

答案 0 :(得分:1)

试试这个:引号修复了某些路径名的问题,并且更改了括号。

请注意,如果这些路径\文件都不存在,则不会设置该变量。

@echo off

echo.
echo Verifying existence of File
set "bcdpath="
for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
  if exist "%%d:\dir1\dir2\dir3\file1" (
     set "BDCPATH=%%d:\dir1\dir2\dir3\file1"
    ) else ( 
     if exist "%%d:\dir1_2\dir2\dir3\file1" set "BDCPATH=%%d:\dir1_2\dir2\dir3\file1"
   )
 )

echo "%BDCPATH%"
echo "%BDCPATH%"

IF NOT EXIST "%BCDPATH%" echo "%BCDPATH%"

if not defined bcdpath echo no files found
pause
goto :eof

答案 1 :(得分:0)

很好的猜测,但通过花更多的时间玩我发现了两件事:

@echo off

echo.
echo Verifying existence of File

for %%d in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
  if exist %%d:\dir1\dir2\dir3\file1 (
     set BDCPATH=%%d:\dir1\dir2\dir3\file1
    ) else if exist %%d:\dir1_2\dir2\dir3\file1 (
     set BDCPATH=%%d:\dir1_2\dir2\dir3\file1
    )
)



echo %BDCPATH%
echo %BDCPATH%

IF NOT EXIST %BDCPATH% echo %BDCPATH%


:eof
  1. 我有%BCDPATH%而不是%BDCPATH%
  2. 它应该是goto somename而不是goto :somename