11

我在 XP Pro SP3 系统上创建的 BAT 文件每次都能完美运行。
安装在另一个 XP [也是 Pro SP3] 系统上,它每次都会失败(“挂断”)。

问题出在多步管道中。为了隔离它,我一直在简化,直到我到达这个最小的 [人工] 测试用例

    echo. | date | find "/" | find "/" | find "/"

注意:前两个步骤没有缩短,date /t因为某些用户的系统是 XP 之前的系统[因此缺少命令扩展]。另外:仔细测试表明它date正在执行 MS-DOS 内部DATE命令,并且find正在执行在“C:\WINDOWS\system32\”中找到的 vanilla“FIND.EXE,2004 年 8 月 4 日,9216”[与“中的安全副本相同” C:\i386\"]。

在失败的系统上,每个具有 4 或更多 |s 的命令都会在第五步中挂起,即使 - 就像这里一样 - 程序很简单并且它们正在处理的文本量是微不足道的。

昨天我对用户的系统做了一些进一步的测试,发现了一个我不知道的微妙之处。我在命令提示符处输入了简化的命令 [上图]。正如预期的那样,它失败了[“挂起”]。然而,当我重新启动并在做任何其他事情之前再次尝试时[这种情况在用户的正常操作中永远不会发生],我感到震惊:它起作用了[即,MS-DOS DATE 命令的输出按预期显示]。它再次起作用了。然后在第三次尝试时,故障模式再次出现,此后一直保持一致。
我确认这files=40对两个系统都有效,然后放弃了。我仍然很好奇,但我不能花很多时间在一个小项目上让一个公益客户分析一个我很容易解决的问题。

感谢大家快速而有用的回复。

在原始系统上,具有 4 个或更多 |s 的命令可以正常工作,而不管调用哪些程序以及它们正在处理多少文本 [在合理范围内]。

一旦认识到限制,就会有许多微不足道的解决方法,所以我的问题只是出于好奇:任何人都可以提出限制来自哪里以及 [XP 中] 是否存在会提高/消除它的设置?

注意:任一系统上均不存在 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun 和 HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun。

另外:我很抱歉通过重复编辑我的原始帖子来回答评论,但无论我使用哪个浏览器登录,“添加评论”弹出窗口 [或任何它应该是的] 都不会出现。也许我的理解是,在我自己的帖子中添加评论不需要声誉点数是错误的。但是,现在我看到“显示 # 更多评论”也不起作用。

最后:我在使用此站点时遇到的问题 [主要症状是 javascript 控制台消息“未捕获的 ReferenceError:未定义 StackExchange”] 与此处讨论的问题相同https://meta.stackexchange.com/questions/117730 /stack-overflow-onclick-actions-broken大约一年前。

4

2 回答 2

1

使用 ^ 避免特殊字符
示例回显。^| 日期^| 找到“/”^| 找到“/”^| 寻找 ”/”

http://www.robvanderwoude.com/escapechars.php

于 2013-03-13T15:08:46.180 回答
0

有时,如果注册表中的某些内容丢失,您必须手动添加它以使其正常工作。或者,获取一些高级 windows BAT 编辑器,它将扩展您的批处理脚本的可能性,使其超出标准 windows 命令等。为此,他们通常将您的批处理文件附加并转换为 exe ,因为可执行文件是扩展功能的引擎。它们中的大多数是共享软件,但是,请注意它们的规格,在这种情况下,您所需要的只是带有引擎的简单编辑器,它将批处理文件提取到临时目录并执行它。您可能不需要用于混淆您的批处理文件的东西。

于 2013-03-15T04:40:52.030 回答