我的批处理文件不断循环,但为啥?

Posted

技术标签:

【中文标题】我的批处理文件不断循环,但为啥?【英文标题】:My Batch File keeps looping, but why?我的批处理文件不断循环,但为什么? 【发布时间】:2021-05-03 11:44:37 【问题描述】:

我已经从我正在创建的 VB.NET 程序中编写了一个批处理文件。

当我在 Windows XP 中双击该文件时,它会弹出一个命令提示符,并且似乎在一遍又一遍地运行。

我的批处理文件如下

REG ADD "HKCU\Software\Classes\*\shell\Open Folder In Rename" /ve /t REG_SZ  /d "Open With Rename" /f
REG ADD "HKCU\Software\Classes\*\shell\Open Folder In Rename\Command" /ve /t REG_SZ  /d "P:\Misc\Rename v2.0\Rename v2.0\bin\Debug\Rename v2.0.exe ""%1""" /f
EXIT

我不明白我做错了什么,但如果我打开命令提示符并从那里运行它,它会运行一次。

任何帮助将不胜感激!

谢谢

【问题讨论】:

你看到任何输出了吗? 是的,它只是不断重复以下操作,直到我按 Ctrl+CP:\Misc\Rename v2.0\Rename v2.0\bin\Debug>REG ADD "HKCU\Software\Classes*\shell \Open Folder In Rename" /ve /t REG_SZ /d "Open With Rename" /f 它也不添加注册表项 删除EXIT 命令。再次检查结果。 我猜:你的文件名是REG.bat? jeb 回答了您的问题。您正在尝试通过 PATH 变量执行 REG.EXE,但您的批处理正在从当前目录执行自身。所以,是的,更改批处理脚本的名称。 【参考方案1】:

在 windows 命令行中,如果您想执行一个命令或一组命令,那么我们通常将这些命令放入 .bat 文件中以便在任何时间点执行它们,但在执行之前我们必须遵循一些准则。

    文件名和命令名不能相同,否则会永远循环。 该目录中不应有与命令名称相同的文件。

【讨论】:

【参考方案2】:

确保:

    您的脚本名称不像内置命令或程序

    确保您的脚本调用的脚本没有像内置命令或程序那样命名

例如如果您的脚本被调用:调用shutdown -t 10 -r的reeeeeboooot.bat,但在同一个文件夹中驻留shutdown.cmd

reeeeeboooot.bat 实际上会调用内置命令的shutdown.cmd INSTEAD。

有时最简单的事情是最难的。 (实际上经常:-D)

【讨论】:

【参考方案3】:

在 windows 中,如果你有一个与你的 bat 文件名同名的命令行可执行文件,并且批处理文件包含此命令,批处理文件会一直循环。

例子:

在您的桌面上创建文件net.bat。 在您的文件中写入以下文本:net

双击文件,它会一直循环播放。

此行为的原因是命令的执行顺序。您要执行的命令位于路径中的文件夹之一中。但是批处理文件在您当前的文件夹中,因此它会首先执行,从而导致循环。

【讨论】:

在 Windows 7 中,情况似乎并非如此。在 Windows 10 中使用相同的脚本,我遇到了循环问题。这可能是 Windows 10 的一项功能。 刚刚在 Windows 7 和 Windows 8 中尝试过,循环问题就在那里。 在 Linux 上,这被认为是一种安全风险。要从当前目录运行文件,您必须在文件名前专门添加./,或者将当前目录. 添加到PATH。那么为什么 Windows 默认启用它呢? 谁会猜到! :-D

以上是关于我的批处理文件不断循环,但为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使使用 setlocal enabledelayedexpansion 也无法访问 for 循环(批处理文件)中的局部变量? [复制]

多处理返回“打开的文件太多”,但使用 `with...as` 修复它。为啥?

为啥我不能在 android 10 中处理文件? [复制]

如何在批处理文件中循环注册表值

条件For循环在批处理文件中不起作用

为啥每笔交易都算作一个客户?