如果和其他错误BATCH

时间:2012-08-22 10:21:27

标签: batch-file cmd

如果和其他批次我已经尝试了很多时间让这个工作,但我似乎无法找到问题可以有人帮忙吗?

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

2 个答案:

答案 0 :(得分:3)

您应该阅读手册!
if /?

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

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

答案 1 :(得分: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 

因此{(1}}行末尾的“(”)将其继续显示在IF行上的匹配“)”,但没有“{”在else之后{1}}在同一行,else命令终止,语法不正确。

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

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

你究竟想做什么?