【问题标题】:Execute Batch Script From Environment Variable从环境变量执行批处理脚本
【发布时间】:2026-01-04 08:30:01
【问题描述】:

我设置了一个名为 find 的系统环境变量,它指向一个批处理脚本。我这样做是为了在 Win 命令提示符中输入 %find% 并执行我的脚本。它唯一的问题是它只能工作一次,我的脚本需要一个参数或需要用户输入(都尝试过),然后就好像 %find% 被暂时覆盖了,%find% 当然不再工作,直到我重新打开命令窗口。基本上它工作一次就可以了!

我怎样才能让它每次都工作?我想在不重新加载命令窗口的情况下一遍又一遍地使用环境变量执行我的脚本。

谢谢。

【问题讨论】:

    标签: windows batch-file environment-variables command-prompt


    【解决方案1】:

    我用以下代码创建了一个批处理脚本:

    @ECHO off
    echo hello
    

    并添加了一个名为 TEST 的指向脚本的环境变量。多次使用环境变量执行脚本没有问题。

    您能否提供一些有关您的脚本功能的信息或代码?

    【讨论】:

    • 它第一次可以找到,然后当我再次运行它时,我得到“'%find%' 不是内部或外部命令、可运行程序或批处理文件。”。此外,该脚本类似于使用 findstr 的 linux grep 脚本。
    • 检查彼得斯的答案,尽管我也尝试将我的环境变量重命名为“查找”,但它仍然有效。可以肯定的是,将其重命名为“find2”。
    • 谢谢大家,我知道现在的问题是什么,环境变量与批处理文件的名称相同,但名称不同,它现在一直有效:D 我以前遇到过这个问题情况略有不同,应该已经意识到。谢谢!!
    • @DraconianTimes:这不是问题。您可以通过更改批处理文件的名称(和变量中的值)并保留变量的以前名称来测试它:问题应该仍然存在(请参阅我的答案)。
    【解决方案2】:

    请记住,find 是 MS 提供的实用程序。

    尝试使用其他名称。并向我们​​展示您的批次——甚至可以描述当它“不再有效”时会发生什么。 20 个问题的游戏很乏味。

    【讨论】:

      【解决方案3】:

      问题是批处理脚本使用了同名的变量,所以第一次运行后变量值被覆盖,不再起作用。为防止这种情况发生,请在批处理文件的开头插入setlocal 命令;这样,当脚本结束时,所有变量都会重置为脚本运行之前的值。此方法还会删除 Batch 脚本中定义的所有新变量,从而保持环境清洁。

      【讨论】:

      • 与此结合,在脚本末尾添加endlocal 也很好(将环境变量恢复到之前的状态)。
      • @SethMcCauley:setlocal /? 命令的帮助表明:“当到达批处理脚本的末尾时,将对该批处理脚本发出的任何未完成的 SETLOCAL 命令执行隐含的 ENDLOCAL。”跨度>
      【解决方案4】:

      如果您打算覆盖现有 find.exe 实用程序的行为,您可以将脚本的位置添加到 System32 文件夹(find.exe 所在的位置)之前的全局路径变量中。例如,假设您的脚本是C:\Scripts\find.bat。如果您的路径变量当前设置为:

      %SystemRoot%\system32;%SystemRoot%
      

      ...那么您将其更改为:

      C:\Scripts;%SystemRoot%\system32;%SystemRoot%
      

      但请注意...这样做可能会破坏其他使用 find 命令的脚本(如果它们不使用 find.exe 的绝对路径)。

      如果您只是想要一种简单的方法来运行您的备用查找命令,您可以按照其他人的建议给它一个不同的名称,然后将其添加到路径的末尾或将其放在 System32 文件夹中。这至少可以让您不必输入百分号。

      【讨论】:

        最近更新 更多