批量如果存在于For循环中不起作用?

时间:2014-06-22 23:24:35

标签: batch-file for-loop

我正在编写一个循环通过PC上本地驱动器的批处理文件,并测试驱动器根目录中是否存在文件。如果该文件存在,我想要做一些事情&如果它不存在我想做其他事情,但If Exists声明不起作用。这是代码片段:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /F "tokens=2 delims==" %%D in ('"wmic logicaldisk where drivetype=3 get name /format:value"') do (
  echo %%D
  if exist %%D\file.txt (
    echo Processing Drive %%D
    Do Something ...
  ) else (
    Do Something Else ...
  )
)
goto :EOF

如果我将If块移出For循环并将其标记为批处理文件中的子程序并从For循环内调用它可以正常工作,但我想了解它为什么没有&#39 ;在For循环内部工作。

1 个答案:

答案 0 :(得分:1)

如果您使用echo %%D更改echo ...[%%D]...行,您将会看到它失败的原因。

WMIC输出在其输出中包含需要删除的附加回车

@echo off
setlocal EnableExtensions EnableDelayedExpansion
for /F "tokens=2 delims==" %%a in (
    '"wmic logicaldisk where drivetype=3 get name /format:value"'
) do for %%D in (%%a) do (
  echo ....[%%D]....
  if exist %%D\file.txt (
    echo Processing Drive %%D
  ) else (
    echo Skipping Drive %%D
  )
)
goto :EOF

在这种情况下,aditional for将处理删除附加CR的问题。