0

if 和 else 批量我已经尝试了很多次来让这个工作,但我似乎无法找到问题任何人都可以帮忙吗?

FOR /R "C:\Program Files" %%a IN (.) DO
if exist "%%~a\yes.txt" (
    echo yes
) else 
(
    md Pictures
)
4

2 回答 2

3

你应该看说明书!
if /?

描述了括号必须在ELSEis 所在的同一行。

FOR /R "C:\Program Files" %%a IN (.) DO (
  if exist "%%~a\yes.txt" (
    echo yes
  ) else (
    md Pictures
  )
)
于 2012-08-22T10:42:32.517 回答
1

在 cmd shell 的语法中,命令以行尾结束,除非仍然有一个“()”打开。因此,在您上面的代码中,该行

FOR /R  "C:\Program Files" %%a IN (.) DO

是完整的for循环 - 你正在循环并且DO什么都没有。要将FOR命令继续到另一行,您需要添加一个“(”:

FOR /R  "C:\Program Files"  %%a IN (.) DO (

现在您可以使用您的If语句继续该命令。你的If陈述也是如此。你输入了

if exist "%%~a\yes.txt" (
    echo yes
) else 

因此,带有 的行末尾的“(”将其IF继续到带有 的行上的匹配“)” ,但在同一行else之后没有“(” ,您的命令将终止,并且在语法上不正确。elseif

但我不确定你的代码是否真的在做你想做的事。它将尝试在您执行命令的任何目录中创建目录“Pictures” ,并且每次它找到不包含文件的“C:\ Program files”的某些子目录时,它都会尝试重复创建它“yes.txt”(这将是很多目录)。因此,您将在第一次创建“tmp”,然后所有后续尝试只会导致错误消息。

这里的关键是循环会将目录名称分配给 %%a,但它不会对该目录执行“CD”,因此您仍然“在”开始循环的目录中。

你到底想做什么?

于 2012-08-24T21:41:28.950 回答