【问题标题】:How to nest an if statement in the do of a for loop in batch file如何在批处理文件的for循环的do中嵌套if语句
【发布时间】:2016-08-27 19:31:30
【问题描述】:

我无法在批处理脚本的 for 循环结束时执行 if 语句。代码如下...

for /F "tokens=2 delims=/:" %%D in (%DBhost%.txt) do 'if [NOT] %%D==localhost (RD /S /Q "\\%%D\C$\%%D_Health_Check_Logs")'

我已经搜索了很多,实际上认为这可能是无效的?无论如何都要为每个do执行if语句吗?我觉得一定有什么我错过了。我试过(){}[],但没有一个能正常工作。

感谢任何想法或想法。

【问题讨论】:

  • if 语句周围不需要括号或单引号;您应该将比较表达式包含在"" 中以避免出现空字符串的问题...无论如何,首先您应该尝试条件语句是否独立运行...
  • 感谢 cmets。我想你可能已经用条件句搞定了。我目前正在对该部分进行故障排除,因为它没有按预期工作。将继续进行故障排除,并在我得到答案时跟进。我看不出有任何理由说明如果按预期设置条件(看起来它们不是),则条件不应该起作用。

标签: batch-file if-statement for-loop


【解决方案1】:

非常感谢大家。看起来 JosefZ 和 aschipfl 都在。 RD 确实适用于 UNC 路径,我无法让推送和弹出工作,但不需要。更重要的是确保逻辑条件正常工作,而事实并非如此。一旦我设置好了,下面的代码就像一个魅力。

工作代码...

for /F "tokens=2 delims=/:" %%D in (%DBhost%.txt) do (if /I NOT "%%D"=="%DBhost%" (RD /S /Q "\%%D\C$\%%D_Health_Check_Logs"))

【讨论】:

    【解决方案2】:

    让我怀疑rd command 是否允许 UNC 路径。接下来的代码 sn-p 应该以正确的方式对待UNC Network paths。但是,(不确定):它不照顾

    • 存在已删除目录和
    • 用户执行RD操作的权限...

    ...

    for /F "tokens=2 delims=/:" %%D in (%DBhost%.txt) do (
      if /I NOT "%%~D"=="localhost" ( 
         pushd "\\%%D\C$"
         RD /S /Q "%%D_Health_Check_Logs"
         popd
      )
    )
    

    【讨论】:

    • 好吧,到目前为止,我还不能让你上面的例子工作,尽管它看起来应该是正确的。没有 if 语句 rd 确实采用了 UNC 路径。我不知道将它添加到 if 语句是否会有所不同。我将继续使用上述方法,看看是否无法正常工作。目前它只是在这条线的最后崩溃了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多