我的批处理文件不断循环,但为啥?
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 循环(批处理文件)中的局部变量? [复制]