【问题标题】:Batch file appending text to the end of a .txt file is locking the file将文本附加到 .txt 文件末尾的批处理文件正在锁定文件
【发布时间】:2017-11-08 14:20:59
【问题描述】:

我们有一个使用批处理文件的过程,简而言之,它反复获取一些纯文本数据并将其附加到 .txt 文件的末尾以供以后处理。数据处理完毕后,删除.txt。

这是通过使用“>>”运算符将数据附加到 .txt 文件,然后使用 'DEL' cmd 删除 .txt 文件以非常简单和基本的方式完成的。

但是,一位用户在运行此程序时遇到了问题。他们能够将数据附加到 .txt 文件中,但由于文件似乎已被锁定,因此无法将其删除。当批处理文件尝试删除时,他们会收到此消息:

“该进程无法访问该文件,因为它正被另一个进程使用。”

正在创建的 .txt 文件位于网络驱动器上,其他用户也无法删除该文件(或更改它等)。

但是,如果有问题的用户重新启动他们的 PC,则可以编辑和删除该文件(这似乎表明用户的 PC 上有一些进程正在使用该文件)。

下面的批处理文件是我制作的一个非常简化的演示,它为用户体验了这个问题,但对其他人没有。当然,这不是“真正的”过程,但没有任何多余的代码就说明了问题,并且完全独立于主过程正在执行的任何其他操作。

:: we want to repeatedly append text to the end of a txt file
echo test >> test.txt
echo test >> test.txt
echo test >> test.txt

pause

:: but then we cannot delete the file as it appears to be locked
del test.txt

pause

有问题的用户刚刚获得了一台使用 Windows 10 的新 PC。其他人都在使用 Windows 7。也许这就是问题的根源,但我不知道为什么?我知道命令提示符对 Win10 有一些更改,但它们听起来很漂亮。

任何指针将不胜感激。我已经在互联网上搜索了几个小时,但找不到任何类似的问题。也许我做的事情根本上是错误的,没有人会遇到这种情况?!

提前致谢。

【问题讨论】:

  • 我的第一个嫌疑人是机器上运行的反恶意软件扫描程序。但是那些导致共享冲突的情况并不常见,尤其是在像这样的简单情况下。
  • 顺便说一句,控制台 (conhost.exe) 在 Windows 10 中得到了显着更新,但是,据我所知,cmd shell 中没有任何显着变化。我认为这就是您所说的装饰性更改的意思,即对控制台 UI 的更改。

标签: batch-file cmd locking append del


【解决方案1】:

我在 Windows 7 上遇到了类似的问题,会产生相同的错误消息,但我的情况有点不同。就我而言,我在编辑器中打开了一个批处理文件,我进行了更改并保存了它。然后我运行批处理文件,它完成并关闭控制台窗口。我进行了更改并尝试再次保存文件并收到相同的错误消息。如果我等待 30 秒左右,我可以再次保存批处理文件,但是当我再次运行它时,我得到了同样的错误。

我如何关闭控制台窗口并不重要。我可以让批处理文件完成并关闭窗口或通过任务管理器终止批处理文件或单击窗口右上角的 X 并获得相同的结果。

我使用什么编辑器也没有关系。我得到了相同的结果。

在我的情况下,该文件位于本地驱动器 (C:) 上,但该驱动器确实具有网络驱动器映射,但没有其他计算机在运行。

如果 .txt 文件是在本地创建的,你会遇到同样的问题吗? C:?

如果 Win10 机器使用的是驱动器映射,如果你使用的是 UNC 而不是驱动器映射,你会遇到同样的问题吗?

在我的情况下,控制台窗口已关闭,所以我知道 cmd.exe 没有保持文件打开,但我想知道它是否与内存管理或垃圾收集有关。

如果用户注销并重新启动而不是重新启动,用户是否可以删除该文件?

还有另一件事可能会导致。 Windows 现在有一个叫做“延迟写入”的东西。我偶尔会在批处理文件中遇到这个问题。尝试使用类似

的方式在批处理文件中设置延迟而不是暂停
PING 0.0.0.1 -n 3 -w 1000>NUL 2>&1

只是看看它是否会影响任何东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2018-05-05
    • 2015-08-09
    • 1970-01-01
    相关资源
    最近更新 更多