gpt4 book ai didi

windows - 我的批处理文件 (.cmd) 有时会执行部分行

转载 作者:可可西里 更新时间:2023-11-01 14:23:42 24 4
gpt4 key购买 nike

我有一个奇怪的问题,在我使用批处理文件 30 年的时间里从未遇到过。给定一个像这样的虚拟 CMD 文件:

@echo off
:somelabel
echo Testing something
dir /b
echo All is well.
:end

大部分按预期运行,但有时我得到的输出如'ing something' is not recognized as an internal or external command, operable program or批处理文件。

这显然是它砍掉了一行并试图执行其余部分的情况。发生这种情况时,它始终是“随机”线的“随机”部分;它并不总是 X 行,或丢失 Y 个字符,或出现在我有特定字符组合的地方。它也不只影响 echo 语句,它也可以尝试执行 abelir/b

我的系统是完全更新的 Win2008 R2,运行在 VirtualBox 5.0.2 中,运行在完全升级的 Linux Mint 中,运行在 Lenovo ThinkPad 上。脚本全部采用 UTF-8 编码。

...这是怎么回事?我怎样才能避免这种情况?

最佳答案

嗯,根据我的经验,正常 批处理文件不可能出现这种行为。发生这种情况的唯一方法是批处理文件在运行时被修改,因此 cmd.exe 处理器继续读取批处理文件的“下一行”,但在修改后的文件的那个位置有另一个的一部分线。下面的例子展示了这种行为:

@echo off
:somelabel
(for /F "skip=1 delims=" %%a in (%~NX0) do echo %%a) > temp.tmp
del "%~NX0" & ren temp.tmp "%~NX0"
echo Testing something
echo All is well.
:end

在这个例子中 del ... & ren ... 行被执行后,下一行要执行的将在 echo Testing something< 的原始位置的开头被读取 行,但现在有它的 ing something 部分,因为第一个 @echo off 行已被删除。看这个:

@echo offRL
echo Testing something

在前面的方案中,RL 字母代表 CR+LF 控制字符,所以下一个位置是“ing”。

关于windows - 我的批处理文件 (.cmd) 有时会执行部分行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34856786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com