【问题标题】:Problem with batch file doesn't detect file批处理文件的问题未检测到文件
【发布时间】:2022-01-08 14:59:00
【问题描述】:

我的程序有问题,我不知道如何让它检测到文件NewFile(%i%) 存在。

    for /l %%i in (1, 1, 100) do (

    if EXIST NewFile(%i%).txt (
    echo "New file"> NewFile(%%i).txt
    goto EndLoop
    )
    
    if EXIST NewFile.txt(
    echo "New file"> NewFile(%%i).txt
    goto EndLoop
    ) else (
    echo "New file"> NewFile.txt
    goto EndLoop
    )
)

它说“)此时出乎意料。”
我该如何解决这个问题?

【问题讨论】:

  • 那行不通。所有% 包围的变量都在循环运行之前进行评估,因此它们不会在每次循环运行时更新。您需要研究 DOS 批处理文件中的delayedexpansion,并在循环中使用! 而不是%。更多信息:ss64.com/nt/delayedexpansion.html
  • @Ruslan。当代码块内的变量为set 时,需要delayedexpansion。变化的变量需要在执行时进行评估,因此我们启用它,这里的循环内没有设置任何内容,所以这里根本不是问题。
  • 不要将for 元变量与普通环境变量混淆,因此%i% 必须阅读%%i...

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


【解决方案1】:

您目前有一些问题,其中第一个是导致您遇到的问题的问题,但其他问题也会导致脚本无法运行。您有一个 for 循环,循环内有一个括号,for 期望该循环作为循环的结束括号。所以你需要将右括号转义为if EXIST NewFile(%%i^).txt (

您在第一个 if 语句中还有一个无效的 %i%。应该是%%i if EXIST NewFile.txt( 行的左括号前应该有一个空格。

@echo off
for /l %%i in (1,1,100) do (
    if EXIST "NewFile(%%i^).txt" (
    echo "New file"> NewFile(%%i^).txt
    goto :EndLoop
   )
   if EXIST NewFile.txt (
       echo "New file"> NewFile(%%i^).txt
       goto EndLoop
   ) else (
       echo "New file"> NewFile.txt
       goto :EndLoop
   )
)

然后,goto's 因为我不确定你想在那里实现什么,但只是为了确保你知道,如果它找到一个匹配的文件,它将退出循环。如果这是你的意图,那很好,如果你想对所有数字执行操作,你不应该在那里有goto

【讨论】:

  • 谢谢,“goto”用于退出循环,我是批处理编程的新手,所以我不知道如何结束循环。
  • 好的,然后删除循环中的gotos 以处理所有数字。代码对你有用吗?
  • 谢谢它现在确实可以制作 100 个文件,但我想我可以解决这个问题 :)
  • 是的,因为计数器从1 计数,在1100。做更多,增加柜台。如果我理解您的要求,我可能会给出更好的解决方案,而不是使用通用计数器。
猜你喜欢
  • 1970-01-01
  • 2014-01-15
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 2016-01-04
相关资源
最近更新 更多